Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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
Linux Node JS:异步执行命令行并获取输出_Linux_Node.js_Asynchronous_Command Line_Output - Fatal编程技术网

Linux Node JS:异步执行命令行并获取输出

Linux Node JS:异步执行命令行并获取输出,linux,node.js,asynchronous,command-line,output,Linux,Node.js,Asynchronous,Command Line,Output,如何运行命令行并尽快获得输出以在某处显示它们 例如,如果在linux系统上运行ping命令,它将永远不会停止,现在是否可以在命令仍在处理时获取响应? 或者让我们使用apt get install命令,如果我想在安装运行时显示安装进度,该怎么办 实际上,我正在使用这个函数执行命令行并获取输出,但是这个函数在命令行结束之前不会返回,所以如果我运行ping命令,它将永远不会返回 var sys = require('sys'), exec = require('child_pro

如何运行命令行并尽快获得输出以在某处显示它们

例如,如果在linux系统上运行ping命令,它将永远不会停止,现在是否可以在命令仍在处理时获取响应? 或者让我们使用
apt get install
命令,如果我想在安装运行时显示安装进度,该怎么办

实际上,我正在使用这个函数执行命令行并获取输出,但是这个函数在命令行结束之前不会返回,所以如果我运行ping命令,它将永远不会返回

var sys     = require('sys'),
    exec    = require('child_process').exec;

function getOutput(command,callback){
    exec(
        command, 
        (
            function(){
                return function(err,data,stderr){
                    callback(data);
                }
            }
        )(callback)
    );
}

尝试使用spawn而不是exec,然后您可以点击流并侦听数据和结束事件

var process = require('child_process');

var cmd = process.spawn(command);

cmd.stdout.on('data', function(output){
    console.log(output.toString()):
});

cmd.on('close', function(){
    console.log('Finished');
});

//Error handling
cmd.stderr.on('data', function(err){
    console.log(err);
});

请参阅Node.js文档,了解
spawn
此处:

尝试使用spawn而不是exec,然后您可以点击流并收听数据和结束事件。感谢您的回答,我对Node不是很熟悉,只是从它开始,所以一个小代码示例将非常有帮助,它如何处理错误,我在
cmd.stdout.on('error'),…
上添加了一个侦听器,我想用process对象执行此操作,但是
process.on(…
不起作用。对于错误处理,您需要在stderr上侦听。我已将其添加到示例中。您不能将侦听器添加到进程,您需要将其添加到spawn。即使如此,在执行测试的ping命令时,我仍然会收到一个
未处理的“error”事件
node server.js Finished events.js:72 throw er;//未处理的“error”事件^error:spawn enoint at errnoException(child\u process.js:988:11)at process.ChildProcess.\u handle.onexit(child\u process.js:779:34)
@Xsmael您只需以列表的形式输入args,例如:var cmd=process.spawn('ping',['1.1.1.1'])如果您不确定args的外观(即,如果您正在编写包装并且需要考虑空格),您可以使用shell lexer(如libraries.io/npm/shlex)来完成此操作还要注意文档链接中的安全问题。