ChildProcess:标准输入没有被 Python readline 读取

Posted

技术标签:

【中文标题】ChildProcess:标准输入没有被 Python readline 读取【英文标题】:ChildProcess: stdin not getting read by Python readline 【发布时间】:2015-10-15 09:27:40 【问题描述】:

我正在尝试使用child_process 通过标准输入/输出从 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 传入的“事物”。这些写入不应该缓冲吗?我在这里做错了什么。

提前致谢。

【问题讨论】:

【参考方案1】:

除了@lispHK01 回答您需要终止标准输入 - 特别是在发送少量数据时,因为它将位于缓冲区中。

试试这个:

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

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

【讨论】:

【参考方案2】:

试试这个

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

ChildProcess 有一些特质——来自 ChildProcess.stdin 的文档:

如果孩子不是在 stdio[0] 设置为“管道”的情况下生成的,那么这个 不会被设置。

https://nodejs.org/api/child_process.html#child_process_child_stdin

【讨论】:

以上是关于ChildProcess:标准输入没有被 Python readline 读取的主要内容,如果未能解决你的问题,请参考以下文章

使用 ChildProcess 启动进程时“系统找不到指定的文件”

如何写入 Python 子进程的标准输入?

python 基本数据类型

如何使用django restfulframework 实现文件上传

为远程进程的子进程捕获标准输出

为啥我的 while 循环被激活,但没有其他反应?