Rob*_* S. 0 python stdout spawn child-process node.js
我正在尝试从以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()
Run Code Online (Sandbox Code Playgroud)
我正在尝试通过打印一个单独的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);
});
Run Code Online (Sandbox Code Playgroud)
当我运行时sudo node index.js,没有输出,程序将永久保存。
我的想法是print val将输出放入stdout流中,并data在节点程序中触发该事件。但是什么也没发生。
谢谢你的帮助!
默认情况下,所有使用libc的C程序(包括用C编写的CPython)都将在连接到管道时自动缓冲控制台输出。
一种解决方案是每次需要时刷新输出缓冲区:
print val
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是使用带有-u标志的python 强制将其取消缓冲:
var py = spawn('python', ['-u', 'scale.py']);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1215 次 |
| 最近记录: |