如何运行命令行并尽快获取输出以将其显示在某处。

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

请在此处查看spawn的Node.js文档:https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options

08-26 16:37
查看更多