node.js python子进程不会实时打印

Posted

技术标签:

【中文标题】node.js python子进程不会实时打印【英文标题】:node.js python child-process won't print in realtime 【发布时间】: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 中测试过这个问题,但问题仍然存在,我在 *** 上找到的其他解决方案还没有奏效。对不起,如果这是关于第 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'])运行它 【参考方案1】:

proc = spawn('python', ['program.py'], '-u')

事实证明,我产生孩子的方法是错误的。奇迹诞生了一个孩子,玩代码生成了上面的错误,这让我看到了下面的帖子。

但是一旦我用这一行生成它,而不是带有'python program.py -u' 的字符串,它就起作用了。

Node.js - spawned process is generating error "execvp(): No such file or directory"

【讨论】:

以上是关于node.js python子进程不会实时打印的主要内容,如果未能解决你的问题,请参考以下文章

Python:产生具有几个要求的子进程

Node.js 生成子进程并实时获取终端输出

开发中一些小技巧 - 递归打印子视图

python 打印子串

Node.js python子脚本在完成时输出,而不是实时输出

Python 中的代码,在 Node.js 和 Socket.IO 中通信,在 HTML 中呈现