如何捕捉终端输出?

2024-10-03 21:32:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用树莓皮3 b型做https://github.com/JsBergbau/MiTemperature2。它在自己的无限循环中正常工作,但我无法捕获终端的输出。如何使用python实现输出

以下是打印部分:

    measurement_time = datetime.datetime.fromtimestamp(measurement.timestamp)
    print(measurement_time)
    humidity=int.from_bytes(data[2:3],byteorder='little')
    print("Temperature: " + str(temp))
    print("Humidity: " + str(humidity))
    voltage=int.from_bytes(data[3:5],byteorder='little') / 1000.
    print("Battery voltage:",voltage,"V")
    measurement.temperature = temp
    measurement.humidity = humidity
    measurement.voltage = voltage
    measurement.sensorname = args.name
    batteryLevel = min(int(round((voltage - 2.1),2) * 100), 100) #3.1 or above --> 100% 2.1 --> 0 %
    measurement.battery = batteryLevel
    print("Battery level:",batteryLevel)
    measurement_time = datetime.datetime.fromtimestamp(measurement.timestamp)

以下是我在终端上运行的脚本:

python3 LYWSD03MMC.py -d AA:BB:CC:DD:EE:FF

以下是输出:

2021-08-05 11:21:24
Temperature: 24.79
Humidity: 47
Battery voltage: 3.092 V
Battery level: 99

这是run命令和示例输出,感谢您的帮助,致以最良好的问候


Tags: from终端datadatetimebytestimetimestampint
3条回答

你仔细看过代码了吗?有一个回调选项。这是从该脚本获取值的最简单方法。或者,这个问题更像是关于如何捕获python输出的学术问题

如果没有,这将有助于您:

描述回调的文档: https://github.com/JsBergbau/MiTemperature2#callback-for-processing-the-data

访问单个值: 在sendToInflux.shhttps://github.com/JsBergbau/MiTemperature2/blob/master/sendToInflux.sh中有一个例子,其中参数是温度等值

或者在使用sendToFile.sh时,它会逐行给出 sensorname,temperature,humidity,voltage,humidityCalibrated,timestamp MySensor 20.61 54 2.944 49 1582120122

这些数据应该很容易用python或awk处理

更改代码,使其return成为信息,而不仅仅是print它。如果您有如下代码

something = some_function_call(123)
print(something)
other_one = different_function("some data here?").strip()
print(other_one)

可能重构为

def get_something(number):
    return some_function_call(number)

def get_other_one():
    return different_function("some data here?").strip()

if __name__ == '__main__':
    print(get_something(123))
    print(get_other_one())

现在,您可以创建额外的代码来检索这些值,而无需打印它们,并对它们执行任何操作。把它们放在网站上?把它们上传到数据库?Rot13加密它们并发送电子邮件给比尔·盖茨?你的想象力是极限

如何准确地设计代码是一个广泛的话题,已经有很多书写过,将来还会有更多。一个常见的安排是确保有用的部分在模块化函数中,模块化函数只做一件事(理想情况下没有任何副作用),因此您可以import此代码并从其他程序中使用它。(这就是if __name__部分很有用的原因。它确保在import创建此文件时块内的代码不会运行。)

添加命令行

2>&1 | tee result.txt

它可以保存命令行输出

相关问题 更多 >