我有一个运行很长时间的脚本。它会生成一个输出。我正在使用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
一次性拍摄。无论如何,我可以立即发送stdout,直到子进程停止为止?
答案 0 :(得分:0)
简短的回答是:
您需要在非缓冲模式下重新开启
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()