我试图制作一个python程序的stdout触发一个事件,我的node.js应用程序检测到它并将该stdout的数据发送到客户端的浏览器。 / p>
问题是程序在它终止之前不会提供它的标准输出......并且我猜想关闭管道。
我需要它,因为行打印节点在每个print语句之后获取stdout。
这是一个使用python program.py
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)
下面的侦听stdout并将其发送到带有socket 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
...
答案 0 :(得分:0)
proc = spawn('python',['program.py'],' - u')
事实证明我产生孩子的方法是错误的。这是一个奇迹,它曾经催生了一个孩子,玩上面产生错误的代码,导致我到下面的帖子。
但是一旦我用这一行产生它,而不是带有'python program.py -u'
的字符串,它就起作用了。
Node.js - spawned process is generating error "execvp(): No such file or directory"