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();