Node.js 子进程到 Python 进程

洛雷托帕里西

我必须将文本从 node.js 子进程发送到 python 进程。我的虚拟节点客户端看起来像

var resolve = require('path').resolve;
var spawn = require('child_process').spawn;

data = "lorem ipsum"

var child = spawn('master.py', []);

var res = '';
child.stdout.on('data', function (_data) {
    try {
        var data = Buffer.from(_data, 'utf-8').toString();
        res += data;
    } catch (error) {
        console.error(error);
    }
});
child.stdout.on('exit', function (_) {
    console.log("EXIT:", res);
});
child.stdout.on('end', function (_) {
    console.log("END:", res);
});
child.on('error', function (error) {
    console.error(error);
});

child.stdout.pipe(process.stdout);

child.stdin.setEncoding('utf-8');
child.stdin.write(data + '\r\n');

而 Python 进程master.py

#!/usr/bin/env python

import sys
import codecs

if sys.version_info[0] >= 3:
    ifp = codecs.getreader('utf8')(sys.stdin.buffer)
else:
    ifp = codecs.getreader('utf8')(sys.stdin)

if sys.version_info[0] >= 3:
    ofp = codecs.getwriter('utf8')(sys.stdout.buffer)
else:
    ofp = codecs.getwriter('utf8')(sys.stdout)

for line in ifp:
    tline = "<<<<<" + line + ">>>>>"
    ofp.write(tline)

# close files
ifp.close()
ofp.close()

我必须用一个utf-8编码输入的读者,所以我使用sys.stdin,但似乎Node.js的写入子进程的时候stdin使用child.stdin.write(data + '\r\n');,这样不会被读取sys.stdinfor line in ifp:

奥托大师

您需要child.stdin.end()在最终调用child.stdin.write(). end()调用之前,child.stdin可写流会将写入的数据保存在缓冲区中,因此 Python 程序不会看到它。有关详细信息,请参阅https://nodejs.org/docs/latest-v8.x/api/stream.html#stream_buffering 中缓冲讨论

(如果您写入大量数据,stdin则写入缓冲区最终将填充到累积数据将自动刷新到 Python 程序的点。然后缓冲区将再次开始收集数据。end()需要调用以确保写入的数据的最后一部分被刷新。它也有指示子进程不会在此流上发送更多数据的效果。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从Node JS子进程中的python脚本返回结果

来自分类Dev

如何在node.js子进程模块中将消息以及stdout从子进程传递到父进程?

来自分类Dev

node.js子进程更改目录并运行该进程

来自分类Dev

如何从Node JS中的子进程获取进程ID

来自分类Dev

node.js 与 docker 中的子进程

来自分类Dev

Node.js + Python子进程:打印返回数据,但返回不

来自分类Dev

从stdin读取时,Node.js无法读取python子进程stdout

来自分类Dev

python子进程-分离进程

来自分类Dev

python转发SIGINT到子进程

来自分类Dev

Node.js进程重启

来自分类Dev

Node.js子进程和管道-OSX与Ubuntu

来自分类Dev

如何在Node.js中等待子进程完成?

来自分类Dev

Node.js-在子进程中需要相同的模块

来自分类Dev

从同一node.js子进程运行多个命令

来自分类常见问题

node.js子进程-生成和派生之间的区别

来自分类Dev

如何使用pid杀死Node.js子进程?

来自分类Dev

如何用生成的子节点替换node.js进程?

来自分类Dev

Node.js子进程中的数据丢失

来自分类Dev

Node.js检测到子进程退出

来自分类Dev

Node.js:杀死ChildProcess#spawn的子进程

来自分类Dev

node.js在子进程中运行功能?

来自分类Dev

从node.js运行git作为子进程?

来自分类Dev

Javascript(node.js)限制子进程数

来自分类Dev

如何重新启动Node.js子进程

来自分类Dev

Javascript(node.js)限制子进程数

来自分类Dev

从node.js运行git作为子进程?

来自分类Dev

从同一node.js子进程运行多个命令

来自分类Dev

单击按钮后执行 Node.js 子进程

来自分类Dev

如何在node.js(不是子进程)中启动全新的进程?