如何从nodejs实时发送stdout到angularjs?

我有一个脚本运行了很长时间。 它产生一个输出。 我使用child_process从nodejs运行此脚本。 如何在脚本开始执行时立即发送该脚本的输出,并且不要等待脚本完成。 我目前有的代码等待脚本完成,然后在nodejs控制台上一次输出所有stdout。

示例脚本:

import time if __name__ == '__main__': for i in range(5): time.sleep(1) print("Hello how are you " + str(i)) 

nodejs代码:

 var spawn = require('child_process').spawn, ls = spawn('python', ['path/test.py']); ls.stdout.on('data', function (data) { console.log('stdout: ' + data); }); ls.stderr.on('data', function (data) { console.log('stderr: ' + data); }); ls.on('close', function (code) { console.log('child process exited with code ' + code); }); 

console.log等待脚本完成然后输出

 Hello how are you 1 Hello how are you 2 Hello how are you 3 Hello how are you 4 Hello how are you 5 

一枪。 无论如何,我可以实现立即发送标准输出直到它的书面,直到subprocess停止?

简短的回答是:

您需要以非缓冲模式重新打开sys.stdout

例:

 import os import sys sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) 

所以你的程序看起来像这样:

 import os import sys import time if __name__ == '__main__': sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) for i in range(5): time.sleep(1) sys.stdout.write("Hello how are you " + str(i)) sys.stdout.flush()