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

如何在独立控制台窗口打印多线程输出?树莓派传感器场景

在树莓派上实现多传感器线程输出到不同控制台窗口

嘿,这个需求太实用了——分开显示不同传感器的数据,不管是调试还是日常监控都能大幅提升可读性!我给你分享两个在树莓派上亲测有效的方案,你可以根据自己的使用场景来选:

方案一:启动独立终端窗口(适合桌面环境)

因为同一个Python进程里的线程会共享标准输出,没法直接把不同线程的输出分到不同终端窗口。所以我们可以把每个传感器的读取逻辑放到独立的脚本里,然后用主脚本启动独立的终端进程来运行这些脚本,这样每个终端就会对应一个传感器的输出。

步骤1:编写传感器读取脚本

先写两个负责单独传感器数据读取的脚本:

sensor1.py

import time
import threading
# 替换成你实际使用的传感器库,比如RPi.GPIO、Adafruit_DHT等
from your_sensor_library import Sensor1

def read_sensor():
    sensor = Sensor1()
    while True:
        # 模拟传感器数据读取,替换成你的实际读取逻辑
        sensor_data = sensor.get_current_value()
        print(f"[传感器1] 实时数据: {sensor_data}")
        time.sleep(1)

if __name__ == "__main__":
    # 用线程持续读取(也可以直接跑循环,线程方式更灵活)
    read_thread = threading.Thread(target=read_sensor)
    read_thread.daemon = True
    read_thread.start()
    # 保持脚本运行,避免终端窗口自动关闭
    while True:
        time.sleep(1)

sensor2.py

import time
import threading
from your_sensor_library import Sensor2

def read_sensor():
    sensor = Sensor2()
    while True:
        sensor_data = sensor.get_current_value()
        print(f"[传感器2] 实时数据: {sensor_data}")
        time.sleep(1.5)  # 可以根据传感器采样频率调整

if __name__ == "__main__":
    read_thread = threading.Thread(target=read_sensor)
    read_thread.daemon = True
    read_thread.start()
    while True:
        time.sleep(1)

步骤2:编写主启动脚本

然后写一个主脚本,用来启动两个独立的终端窗口:

main.py

import subprocess
import os

# 获取当前脚本所在目录,确保子脚本路径正确
script_path = os.path.dirname(os.path.abspath(__file__))

# 树莓派默认桌面用lxterminal,其他终端比如xterm也可以替换
# 启动第一个终端,运行sensor1.py
subprocess.Popen([
    "lxterminal", 
    "-e", 
    f"python3 {os.path.join(script_path, 'sensor1.py')}"
])

# 启动第二个终端,运行sensor2.py
subprocess.Popen([
    "lxterminal", 
    "-e", 
    f"python3 {os.path.join(script_path, 'sensor2.py')}"
])

运行python3 main.py后,桌面会弹出两个终端窗口,各自实时显示对应传感器的数据。

方案二:用tmux分窗(适合无桌面/SSH远程连接)

如果你的树莓派是无桌面的 headless 模式,或者经常通过SSH远程操作,用tmux(终端多路复用工具)会更方便——它能在一个终端会话里分出多个窗格,每个窗格显示一个传感器的输出,还能后台保持会话。

步骤1:安装tmux

如果没装的话,先安装:

sudo apt update && sudo apt install tmux -y

步骤2:编写启动脚本

创建一个shell脚本start_sensors.sh:

#!/bin/bash

# 创建一个名为sensor_monitor的tmux会话(后台运行)
tmux new-session -d -s sensor_monitor

# 在第一个窗格运行sensor1.py
tmux send-keys -t sensor_monitor 'python3 /home/pi/sensors/sensor1.py' C-m

# 垂直拆分窗格,创建第二个窗格
tmux split-window -v -t sensor_monitor

# 在第二个窗格运行sensor2.py
tmux send-keys -t sensor_monitor:0.1 'python3 /home/pi/sensors/sensor2.py' C-m

# 进入这个tmux会话
tmux attach-session -t sensor_monitor

步骤3:运行脚本

给脚本加执行权限,然后运行:

chmod +x start_sensors.sh
./start_sensors.sh

运行后你会看到一个分成上下两个窗格的终端,分别显示两个传感器的数据。如果需要暂时退出,按Ctrl+B然后按D,会话会在后台保持,下次用tmux attach-session -t sensor_monitor就能回到监控界面。

关键注意点

  • 同一个Python进程的线程共享标准输出,所以必须用独立进程(或独立脚本)来实现不同窗口的输出,这是核心逻辑。
  • 传感器库部分一定要替换成你实际使用的库,比如读取温湿度用Adafruit_DHT,读取GPIO用RPi.GPIO等。
  • 如果用方案一,确保树莓派处于桌面环境(启动了图形界面),否则lxterminal无法运行。

内容的提问来源于stack exchange,提问作者SohaibAJ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:08:06