Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Node.JS中获得派生子_进程的输出?_Node.js_Shell_Output_Child Process_Spawn - Fatal编程技术网

如何在Node.JS中获得派生子_进程的输出?

如何在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' }); }

首先,我是一个彻头彻尾的noob,昨天开始使用Node.JS(这也是我几年来第一次使用Linux),所以请友好明确

我目前正在制作一个Node.JS程序,其中包括启动shell命令(主要是:安装usb驱动器)。 我目前正在使用

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 version
v4.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:对不起,代码没有缩进时看起来很糟糕