Python [子] 进程向节点 [父] 进程发送消息

Posted

技术标签:

【中文标题】Python [子] 进程向节点 [父] 进程发送消息【英文标题】:Python [child] process sending message to Node [parent] process 【发布时间】:2017-09-21 06:50:35 【问题描述】:

Python process forked by NodeJS - Alternative to process.send() for Python?

我遵循了上面的解决方案,但似乎不起作用(子 python 代码没有发送任何消息。这是我的代码:

const spawn = require('child_process').spawn;

var child = spawn('python3', ['child.py'], 
    stdio:[null, null, null, 'pipe']
);

child.on('message', function(message) 
    console.log('Received message...');
    console.log(message);
);

# !/usr/bin/python3
import os

os.write(3, str.encode("HELLO"))

我知道可能出了什么问题。请帮忙。

【问题讨论】:

'python3', ['child.py'] python3 在哪里?在你朋友的电脑上? what is differences on default and declaration ? 【参考方案1】:

我认为第四个参数需要是 'ipc' 而不是 'pipe' 才能启用这种消息传递方式。

'ipc' - 创建用于传递消息/文件描述符的 IPC 通道 父母与孩子之间。一个 ChildProcess 最多可以有一个 IPC stdio 文件描述符。设置此选项可启用 subprocess.send() 方法。如果孩子将 JSON 消息写入此 文件描述符, subprocess.on('message') 事件处理程序将是 在父级中触发。如果子进程是 Node.js 进程,则 IPC 通道的存在将启用 process.send(), process.disconnect()、process.on('disconnect') 和 子进程中的 process.on('message')。

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

根据默认设置的 fork 的描述(与其他语言的 spawn 不同):

标准输出 |请参阅 child_process.spawn() 的 stdio。当这 提供了选项,它会覆盖静默。如果使用数组变体, 它必须只包含一个值为“ipc”的项目,否则将出现错误 抛出。例如 [0, 1, 2, 'ipc']。

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

【讨论】:

以上是关于Python [子] 进程向节点 [父] 进程发送消息的主要内容,如果未能解决你的问题,请参考以下文章

通过 npm 脚本生成时从子进程向父进程发送消息

无法将子进程发送回父进程的消息

与子进程通信的最快方式

使用命名管道向子进程发送参数

如何在Linux上的c中的父进程和子进程之间进行乒乓球

golang父进程通过管道向子进程传递数据