【发布时间】:2015-08-30 17:45:57
【问题描述】:
我有一个可以运行很长时间的脚本。它生成一个输出。我正在使用 child_process 从 nodejs 运行此脚本。如何在脚本开始执行后立即发送它的输出,而不是等待脚本完成。我目前拥有的代码等待脚本完成,然后在 nodejs 控制台上一次输出所有标准输出。
示例脚本:
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
一口气。无论如何我可以实现立即发送标准输出,直到子进程停止?
【问题讨论】:
-
您将在这里遇到缓冲问题。
-
python 输出是否提供?在每个
print之后尝试flash它import sys和sys.stdout.flush() -
缓冲的不是 Python 输出(是的,您可以刷新它),但操作系统也会缓冲输出!阅读:turnkeylinux.org/blog/unix-buffering
-
我知道这就是节点的 spawn 和 exec 之间的区别。产卵
标签: javascript python angularjs node.js