ChildProcess:stdin未被Python readline读取
我试图通过stdin/out使用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
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();