ChildProcess:stdin没有被Python readline读取

我正在试图通过使用child_process stdin / out从Node的Python脚本进行交互,如下所示:

 var p = require('child_process').spawn('python', ['test_io.py']); p.stdout.on('data', function(data) { console.log(data.toString()); }); p.stdin.write('thing'); 

这是相关的Python部分:

 import io import sys _input = io.open(sys.stdin.fileno()) _output = io.open(sys.stdout.fileno(), 'w') while True: _output.write(_input.readline()) 

但是,现在看来,Python脚本并不是通过stdin.write读取“东西”。 这些写不应该缓冲? 我在这里做错了什么。

提前致谢。

尝试这个

 var p = require('child_process').spawn('python', ['test_io.py'], { stdio: 'pipe'}); 

ChildProcess有一些特质 – 来自ChildProcess.stdin的文档:

如果孩子没有被设置为“pipe”的stdio [0]产生,那么这不会被设置。

https://nodejs.org/api/child_process.html#child_process_child_stdin

除了@ lispHK01答案你需要终止标准input – 特别是当发送less量的数据,因为它将坐在一个缓冲区。

尝试这个:

 var p = require('child_process').spawn('python', ['test_io.py'], { stdio: 'pipe'}); p.stdin.write('thing'); p.stdin.end();