如何在Node.JS中获得派生子_进程的输出?
首先,我是一个彻头彻尾的noob,昨天开始使用Node.JS(这也是我几年来第一次使用Linux),所以请友好明确 我目前正在制作一个Node.JS程序,其中包括启动shell命令(主要是:安装usb驱动器)。 我目前正在使用如何在Node.JS中获得派生子_进程的输出?,node.js,shell,output,child-process,spawn,Node.js,Shell,Output,Child Process,Spawn,首先,我是一个彻头彻尾的noob,昨天开始使用Node.JS(这也是我几年来第一次使用Linux),所以请友好明确 我目前正在制作一个Node.JS程序,其中包括启动shell命令(主要是:安装usb驱动器)。 我目前正在使用 var spawn = require('child_process').spawnSync; function shspawn(command) { spawn('sh', ['-c', command], { stdio: 'inherit' }); }
var spawn = require('child_process').spawnSync;
function shspawn(command) {
spawn('sh', ['-c', command], { stdio: 'inherit' });
}
shspawn('echo Hello world');
shspawn('mkdir newdir');
等等,这对我来说是一种非常舒适的方式。
问题是,我希望以如下方式将“ls”命令的输出存储在变量中
var result = shspawn('ls -l')
我在网上读过一些例子,但他们很少使用spawn,当他们使用spawn时,它对我不起作用(我想我可能做错了什么,但我仍然是Node中的noob)
如果你们有一个比使用child\u process\u spawnSync更好的主意,我愿意接受任何想法,但我希望尽可能让我的程序包免费:)
编辑:我需要它同步工作!这就是我开始使用spawnSync的原因。我将使用一些命令,如dd,这需要时间,并且需要在程序转到另一个命令之前完全完成。您可以执行以下操作
var spawn = require('child_process').spawn;
// Create a child process
var child = spawn('ls' , ['-l']);
child.stdout.on('data',
function (data) {
console.log('ls command output: ' + data);
});
child.stderr.on('data', function (data) {
//throw errors
console.log('stderr: ' + data);
});
child.on('close', function (code) {
console.log('child process exited with code ' + code);
});
更新:使用spawnSync
var spawn = require('child_process').spawnSync;
var child = spawn('ls' , ['-l','/usr']);
console.log('stdout here: \n' + child.stdout);
它给了我这个错误:
child.stdout.on('data',function(data){console.log('ls命令输出:'+data);});^TypeError:无法读取null的属性“on”
编辑了答案,但做了一些小改动,它似乎对我有效。再试一次。我使用的是node versionv4.2.4
BTW。它可以很好地与spawn一起工作,谢谢:),但我需要它与spawnSync一起工作,因为我想等待每个命令结束后再转到另一个命令。到目前为止,我有一个可以执行命令的工作函数,但是NodeJS甚至在命令能够返回任何内容之前就已经在程序中运行了。它确实对我有用,谢谢!)我已经设置了这个运行良好的代码:functioncommand(txt){var words=txt.trim().split(“”);var child=spawn(words[0],words.splice(1,words.length));return(“”+child.stdout);}
您知道如何使它也能与管道一起工作吗?就像这行:grep sh | ls-l
Edit:对不起,代码没有缩进时看起来很糟糕