node.js python child-process无法实时打印

时间:2014-03-29 02:59:06

标签: node.js python-3.x inter-process-communicat

我试图制作一个python程序的stdout触发一个事件,我的node.js应用程序检测到它并将该stdout的数据发送到客户端的浏览器。 / p>

问题是程序在它终止之前不会提供它的标准输出......并且我猜想关闭管道。

我需要它,因为行打印节点在每个print语句之后获取stdout。

这是一个使用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)
下面的

侦听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
...

1 个答案:

答案 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"