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

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

我正在尝试做这样的事情:

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的提示符下键入的命令启动的,因此使此过程变得复杂。我将最新版本的相关部分完全提取到了文件中。全文如下:

{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混乱了。我可以编辑并保存文件,并且内容正确打印。出口处也有一堆垃圾打印到终端,并且随后读取行功能被破坏(没有向上/向下箭头,没有制表符完成)。

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

回答:

您可以从主过程继承stdio。

const child_process = require('child_process')

var editor = process.env.EDITOR || 'vi';

var child = child_process.spawn(editor, ['/tmp/somefile.txt'], {

stdio: 'inherit'

});

child.on('exit', function (e, code) {

console.log("finished");

});

此处提供更多选项:http

:

//nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options

以上是 如何从node.js打开终端应用程序? 的全部内容, 来源链接: utcz.com/qa/418327.html

回到顶部