我试图从用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事件。但什么都没发生。
谢谢你的帮忙!
发布于 2018-04-20 18:23:47
默认情况下,使用libc的所有C程序(包括用C编写的CPython)在连接到管道时都会自动缓冲控制台输出。
一种解决方案是每次需要时刷新输出缓冲区:
print val
sys.stdout.flush()另一种解决方案是使用-u标志调用python,该标志强制它不缓冲:
var py = spawn('python', ['-u', 'scale.py']);https://stackoverflow.com/questions/49947402
复制相似问题