我有一个脚本,输出“ hi”,睡眠一秒钟,输出“ hi”,睡眠1秒,依此类推。现在,我认为我可以使用此模型解决此问题。
var spawn = require('child_process').spawn, temp = spawn('PATH TO SCRIPT WITH THE ABOVE BEHAVIOUR'); temp.stdout.pipe(process.stdout);
现在的问题是,需要完成任务才能显示输出。据我了解,这是由于新产生的进程接受了执行控制。显然,node.js不支持线程,那么有什么解决方案吗?我的想法是可能运行两个实例,第一个实例用于创建任务的特定目的,并考虑到可以实现的目的,将其通过管道将输出传递给第二个实例的进程。
我仍然对Node.js感兴趣,但是我有一些想法。首先,我相信您需要使用execFile而不是spawn; execFile用于您具有脚本路径的路径,而spawn用于执行Node.js可以针对您的系统路径解析的众所周知的命令。
execFile
spawn
提供一个回调来处理缓冲的输出:
var child = require('child_process').execFile('path/to/script', [ 'arg1', 'arg2', 'arg3', ], function(err, stdout, stderr) { // Node.js will invoke this callback when process terminates. console.log(stdout); });
流(9thport.net)
var child = require('child_process').execFile('path/to/script', [ 'arg1', 'arg2', 'arg3' ]); // use event hooks to provide a callback to execute when data are available: child.stdout.on('data', function(data) { console.log(data.toString()); });
此外,似乎存在一些选项,您可以从其中将生成的进程与Node的控制终端分离,这将使其可以异步运行。我还没有测试过,但是API文档中有一些例子如下:
child = require('child_process').execFile('path/to/script', [ 'arg1', 'arg2', 'arg3', ], { // detachment and ignored stdin are the key here: detached: true, stdio: [ 'ignore', 1, 2 ] }); // and unref() somehow disentangles the child's event loop from the parent's: child.unref(); child.stdout.on('data', function(data) { console.log(data.toString()); });