首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从node.js打开终端应用程序?

如何从node.js打开终端应用程序?
EN

Stack Overflow用户
提问于 2012-02-03 08:51:28
回答 3查看 14.4K关注 0票数 27

我希望能够从终端中运行的node.js程序打开Vim,创建一些内容,保存并退出Vim,然后抓取文件的内容。

我正在尝试这样做:

代码语言:javascript
复制
filename = '/tmp/tmpfile-' + process.pid

editor = process.env['EDITOR'] ? 'vi'
spawn editor, [filename], (err, stdout, stderr) ->

  text = fs.readFileSync filename
  console.log text

但是,当它运行时,它只会挂起终端。

我也在exec上尝试过,也得到了同样的结果。

更新:

由于此进程是从运行readline的提示符处键入的命令启动的,这一点变得复杂起来。我完整地将最新版本的相关部分提取到一个文件中。下面是它的全部内容:

代码语言:javascript
复制
{spawn} = require 'child_process'
fs = require 'fs'
tty = require 'tty'
rl = require 'readline'

cli = rl.createInterface process.stdin, process.stdout, null
cli.prompt()

filename = '/tmp/tmpfile-' + process.pid

proc = spawn 'vim', [filename]

#cli.pause()
process.stdin.resume()

indata = (c) ->
    proc.stdin.write c
process.stdin.on 'data', indata

proc.stdout.on 'data', (c) ->
    process.stdout.write c

proc.on 'exit', () ->
    tty.setRawMode false
    process.stdin.removeListener 'data', indata

    # Grab content from the temporary file and display it
    text = fs.readFile filename, (err, data) ->
        throw err if err?  
        console.log data.toString()

        # Try to resume readline prompt
        cli.prompt()

它的工作方式如上图所示,它会显示几秒钟的提示符,然后启动到Vim,但TTY搞乱了。我可以编辑和保存文件,并且内容打印正确。在退出时也有一堆垃圾打印到终端,并且Readline功能在退出后被破坏(没有向上/向下箭头,没有Tab补全)。

如果我取消对cli.pause()行的注释,那么TTY在Vim中是可以的,但是我被困在插入模式中,并且Esc键不起作用。如果我点击Ctrl-C,它将退出子进程和父进程。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9122282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档