如果我在Ruby中调用系统方法,它将在子shell中执行我的命令并输出它可以做的一切。所以如果我把它放在file.rb中:
system 'vim'
然后运行$ ruby file.rb
它会启动Vim,以便我可以使用它。如果我在Node.js中执行我认为相同的操作并将其放入file.js:
var exec = require('child_process').exec;
exec('vim');
然后运行$ node file.js
它启动Vim但不输出任何内容(除非我从子进程中捕获stdout并自己输出,这将无法正常工作)。我怎样才能实现我在Ruby with Node中所做的一切?
答案 0 :(得分:1)
与Node中的许多函数一样,返回值实际上不是由函数调用本身返回的,而是传递给作为函数的最后一个参数传递的回调。这种设计允许Node的主循环在子进程运行时处理其他任务。
如果您只想打印孩子的stdout
输出,请执行以下操作:
var exec = require('child_process').exec;
exec('vim', function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
});
如果您还想输出stderr和进程'退出代码,请尝试:
exec('vim', function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
console.log('exit code:', error ? error.code : 0);
});
另请注意,exec()
只是spawn()
周围的便利包装,它提供了更强大的界面,并允许您为stdin
,stdout
和{{使用流1}}。
此示例取自Node的文档here,稍作修改。
答案 1 :(得分:0)
您可以使用node-ffi执行此操作,如下例所示: https://stackoverflow.com/a/6288426/288425
只需将echo $USER
替换为vim
,即可获得互动的vim会话。