【发布时间】:2014-03-29 02:59:05
【问题描述】:
我正在尝试让 python 程序的标准输出触发我的 node.js 应用程序的事件以检测它并将标准输出的数据发送到客户端的浏览器。
问题是程序在终止之前不会提供它的标准输出......并关闭我猜的管道。
我需要这样,因为行打印节点在每个打印语句之后获取标准输出。
这是一个使用 python program.py 运行的示例 python 程序
from __future__ import print_function
import time
import os
import sys
for num in range(0,8):
print('my []-- ', num)
time.sleep(0.2)
sys.stdout.flush()
使用
生成子进程的节点proc = spawn('python3 program.py -u')
var pid = proc.pid
echoIO( pid )
toggleState()
processDriver(proc)
below 监听标准输出并将其发送到带有套接字 io 的浏览器
function processDriver(proc) {
proc.stdout.setEncoding('utf-8');
proc.stdout.on('data', function (data) {
echoIO(data)
})
proc.stderr.on('data', function (data) {
console.log(data)
var res = data.toString()
echoIO(res)
})
proc.on('exit', function (code) {
console.log(code)
stateOff()
echoIO("exit " + code)
sendProcState(JSON.parse('{"status":"not_running"}'))
})
}
我还在 raspbian、ubuntu 和 crunchbang 中测试过这个问题,但问题仍然存在,我在 stackoverflow 上找到的其他解决方案还没有奏效。对不起,如果这是关于第 20 个帖子。
编辑: 我现在也遇到过这种情况
stderr - execvp(): No such file or directory
events.js:72
throw er; // Unhandled 'error' event
^
Error: spawn ENOENT
...
【问题讨论】:
-
你在运行什么子进程程序?它是一个标准程序、一个您可以修改其源代码的程序还是其他什么?
-
它只是任何 python 程序,我使用 'python3 program_name.py' 运行它
-
你能修改Python程序吗?
-
你试过把
-u放在第一位:python3 -u program.py吗? -
关于
ENOENT:你应该以spawn("python3", ['-u', 'program.py'])运行它
标签: node.js python-3.x inter-process-communicat