[英]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.