调用python脚本的节点-奇怪的执行顺序

调用python脚本的节点-奇怪的执行顺序,python,node.js,python-3.x,Python,Node.js,Python 3.x,我尝试了一个相当简单的脚本 import time print("Hello World") time.sleep(5) 这个程序做的和它看起来做的完全一样。它打印Hello World,等待五秒钟,然后退出 然而,当我用node调用它时,事情开始变得奇怪 const spawn = require('child_process').spawn; const process = spawn ('python3', ['./testIn.py']); process.

我尝试了一个相当简单的脚本

import time
print("Hello World")
time.sleep(5)
这个程序做的和它看起来做的完全一样。它打印Hello World,等待五秒钟,然后退出

然而,当我用node调用它时,事情开始变得奇怪

 const spawn = require('child_process').spawn;
 const process = spawn ('python3', ['./testIn.py']);

 process.stdout.on('data', data => {
    console.log(data.toString());
 });

 process.on('close', code => {
     console.log(`child process close all stdio with code ${code}`);
 });
现在发生的情况是,程序等待五秒钟,然后打印
Hello World
,然后在打印后立即退出。 这就像两个命令的顺序是相反的,首先它运行
sleep()
print()


有人知道为什么会发生这种奇怪的行为吗?

Python正在缓冲输出,因此在进程结束之前您不会看到它。您可以使用
-u
选项告诉Python不要这样做。从中,
-u
选项将:

强制取消缓冲stdout和stderr流。此选项对stdin流没有影响。
在版本3.7中更改:标准输出和标准输出流的文本层现在是无缓冲的

但是,我在Windows 10上运行3.7.2,如果没有
-u
选项,我将无法使您的代码正常工作

const process = spawn ('py', ['-u', 'testIn.py']);

trusted const process=spawn('unbuffered','python3',['./testIn.py']);但是没有起作用。还尝试了const process=spawn('python3-u',['./testIn.py']);但不起作用。这在我的Windows计算机上正常工作:
constprocess=spawn('py',['-u','testIn.py'],{shell:true})谢谢!成功了。毕竟,这都是关于-u旗的,但我的声明是错误的。如果你愿意的话,你可以把它作为一个普通的答案贴出来,这样我就可以投赞成票并把它标记为选中的答案。