从 python spawn 子进程接收连续输出不工作

Receiving contiinuous output from python spawn child process not working

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

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()

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

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 应该将输出放入标准输出流,这应该会触发节点程序中的 data 事件。但是什么也没有发生。

感谢您的帮助!

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

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

print val
sys.stdout.flush()

另一种解决方案是使用 -u 标志调用 python,强制它不被缓冲:

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