首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接收python产卵子进程不工作的连续输出

接收python产卵子进程不工作的连续输出
EN

Stack Overflow用户
提问于 2018-04-20 18:02:51
回答 1查看 2.7K关注 0票数 1

我试图从用python编写的称量秤中流输出。这个程序(scale.py)连续运行,每半秒钟打印一次原始值。

代码语言:javascript
复制
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打印的每个原始数据点。这是我的节点程序。

代码语言:javascript
复制
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事件。但什么都没发生。

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-20 18:23:47

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

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

代码语言:javascript
复制
print val
sys.stdout.flush()

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

代码语言:javascript
复制
var py = spawn('python', ['-u', 'scale.py']);
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49947402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档