2012-07-13 193 views
1

是否有可能通过节点启动并继续捕获某个bash输出的输出?例如:假设我运行了tail /some/file,我怎样才能不断地收听每一行新的行,并对输出进行处理?从NodeJS捕获输出输出

+0

那么,你需要附加到过程的标准输出......不知道你是否可以从node.js做到这一点。 – Bobby 2012-07-13 07:33:06

+0

@Bobby是的,你可以,事实上很容易。参见'child_process'模块。 :) – 2012-07-13 16:12:45

回答

6

为了完整起见,我已经添加了这个答案也。

您可以使用child_process.spawn来产生一个进程并监视它的输出。但是,对于像尾巴,猫等不能持续运行的命令,只需使用child_process.exec,它将捕获整个输出为stdoutstderr,并一次性提供给您。

var cp = require("child_process"); 

cp.exec("tail /some/file", function (err, stdout, stderr) { 
    // If an error occurred, err will contain that error object 
    // The output for the command itself is held in stdout and stderr vars 
}); 
8
var spawn = require('child_process').spawn, 
    tail = spawn('tail', ['-f', '/tmp/somefile']); 
tail.stdout.pipe(process.stdout); 

child_process模块​​well documented

+0

您还可以运行['exec'](http://nodejs.org/api/child_process_exec_command_options_callback),它会为您收集'stdout'和'stderr'的整个输出。对于像'尾巴'这样的例子,它可以很好地工作。 (如果你有一个连续运行的脚本,监视输出流是一个更好的选择) – 2012-07-13 16:13:27

+0

是我的脚本是连续的,例如'tail'或Google App Engine的'dev_appserver.py'。我会测试这个并回复你。 – 2012-07-15 15:14:34

+0

这将在Windows上工作吗? – ANinJa 2017-03-15 11:15:44