ChildProcess:stdin没有被Python readline读取

时间:2015-07-24 16:04:59

标签: python node.js stdout stdin child-process

我正在尝试使用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传入。这些写不应该缓冲吗?我在这里做错了什么。

提前致谢。

2 个答案:

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