ChildProcess:stdin未被Python readline读取

ChildProcess:stdin未被Python readline读取,python,node.js,stdout,stdin,child-process,Python,Node.js,Stdout,Stdin,Child Process,我试图通过stdin/out使用child\u进程与节点中的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

我试图通过stdin/out使用
child\u进程与节点中的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传入的“thing”。这些写入不应该是缓冲吗?我做错了什么

提前谢谢。

试试这个

var p = require('child_process').spawn('python', ['test_io.py'], { stdio: 'pipe'});
ChildProcess有一些特性--来自ChildProcess.stdin的文档:

如果子级不是在stdio[0]设置为“pipe”时生成的,则此 不会被设置


除了@lispHK01 answer,您还需要终止stdin,尤其是在发送少量数据时,因为它将位于缓冲区中

试试这个:

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

p.stdin.write('thing');
p.stdin.end();