ChildProcess:Python Readline未读取标准输入

2022-04-16 00:00:00 python stdout stdin node.js child-process

问题描述

我正在尝试从Node通过stdin/out使用child_process与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"。这些写入不应该是缓冲的吗?我在这里做错了什么?

提前谢谢。


解决方案

除了@lispHK01 Answer之外,您还需要终止标准输入,尤其是在发送少量数据时,因为它将位于缓冲区中。

试试:

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

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

相关文章