节点JS:执行命令行并获得输出异步(Node JS: Executing command lines

2019-10-20 02:30发布

我如何运行一个命令行,并尽快得到可用的输出到某处显示它们。

例如,如果在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)
    );
}

Answer 1:

尝试使用菌种,而不是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这里: https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options



文章来源: Node JS: Executing command lines and getting outputs asynchronously