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 [子] 进程向节点 [父] 进程发送消息的主要内容,如果未能解决你的问题,请参考以下文章