You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python子进程无法持续接收称重秤程序输出问题求助

解决Python子进程捕获称重秤程序持续输出的问题

我来帮你搞定这个子进程捕获持续输出的问题!核心问题大概率是标准输出缓冲在搞鬼——默认情况下Python会缓冲stdout的内容,不会实时把打印的内容传给父进程,导致你看不到持续输出。下面给你两种可行的解决方案:

方案一:修改称重秤程序(scale.py)强制刷新输出

既然你的scale.py是Python2语法(看print语句没有括号),直接在每次print后手动刷新stdout,确保内容实时输出:

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
        sys.stdout.flush()  # 关键:强制刷新输出缓冲区
        hx.power_down()
        hx.power_up()
        time.sleep(0.5)
    except (KeyboardInterrupt, SystemExit):  # 补全异常捕获,确保能正常退出
        cleanAndExit()
    except Exception as e:
        print "Error:", e
        sys.stdout.flush()

方案二:在父进程中配置无缓冲的子进程读取

如果不想修改scale.py,也可以在调用子进程时通过subprocess模块设置无缓冲模式,确保实时读取输出:

import subprocess
import sys

def capture_scale_output():
    # 启动子进程,bufsize=0设置无缓冲(Python2适用)
    proc = subprocess.Popen(
        ['python', 'scale.py'],
        stdout=subprocess.PIPE,
        stderr=subprocess.STDOUT,  # 把stderr也重定向过来,方便看错误
        bufsize=0,
        close_fds=True
    )

    # 循环读取每一行输出,直到子进程结束
    for line in iter(proc.stdout.readline, b''):
        line = line.strip()
        if not line:
            continue
        try:
            # 尝试转换为数值(如果是重量值)
            weight = float(line)
            print "Received weight:", weight
        except ValueError:
            # 处理非数值的日志(比如清理信息)
            print "Scale log:", line

    proc.wait()

if __name__ == "__main__":
    try:
        capture_scale_output()
    except KeyboardInterrupt:
        print "Stopping capture..."

关键知识点解释

  • 输出缓冲:Python默认会把stdout的内容攒到一定量才输出,尤其是管道通信时更明显,手动刷新或者设置无缓冲就能解决实时输出的问题。
  • 子进程读取:用iter(proc.stdout.readline, b'')是高效的逐行读取方式,避免阻塞等待整个输出结束。

内容的提问来源于stack exchange,提问作者Rob S.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:31:14