繁体   English   中英

从python派生子进程接收连续输出不起作用

[英]Receiving contiinuous output from python spawn child process not working

我正在尝试从以python编写的秤流式传输输出。 该程序(scale.py)连续运行并每半秒打印一次原始值。

import RPi.GPIO as GPIO
import time
import sys

from hx711 import HX711

def cleanAndExit():
    print "Cleaning..."
    GPIO.cleanup()
    print "Bye!"
    sys.exit()

hx = HX711(5, 6)

hx.set_reading_format("LSB", "MSB")

hx.reset()
hx.tare()

while True:
    try:
        val = hx.get_weight(5)
        print val

        hx.power_down()
        hx.power_up()
        time.sleep(0.5)
    except (KeyboardInterrupt, SystemExit):
        cleanAndExit()

我试图获取每个原始数据点在单独的NodeJs程序(位于同一文件夹中的index.js)中,该程序由print val 这是我的节点程序。

var spawn = require('child_process').spawn;
var py = spawn('python', ['scale.py']);

py.stdout.on('data', function(data){
  console.log("Data: " + data);
});

py.stderr.on('data', function(data){
  console.log("Error: " + data);
});

当我运行sudo node index.js ,没有任何输出,程序将永久保存。

我的思维过程是print val应该将输出放入stdout流中,这应该触发节点程序中的data事件。 但是什么也没发生。

谢谢你的帮助!

默认情况下,所有使用libc的C程序(包括用C编写的CPython)都将在连接到管道时自动缓冲控制台输出。

一种解决方案是每次需要时刷新输出缓冲区:

print val
sys.stdout.flush()

另一个解决方案是使用-u标志调用python,以强制将其取消缓冲:

var py = spawn('python', ['-u', 'scale.py']);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM