我正在尝试使用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
传入。这些写不应该缓冲吗?我在这里做错了什么。
提前致谢。
答案 0 :(得分:0)
试试这个
var p = require('child_process').spawn('python', ['test_io.py'], { stdio: 'pipe'});
ChildProcess有一些特性 - 来自ChildProcess.stdin的文档:
如果孩子没有产生stdio [0]设置为' pipe',那么这个 不会被设定。
https://nodejs.org/api/child_process.html#child_process_child_stdin
答案 1 :(得分:0)
除了@ lispHK01之外,您还需要终止标准输入 - 特别是在发送少量数据时,因为它将位于缓冲区中。
试试这个:
var p = require('child_process').spawn('python', ['test_io.py'], { stdio: 'pipe'});
p.stdin.write('thing');
p.stdin.end();