我有一个可以在嵌入式Linux(在地震数字化仪上)上的bash命令中使用的小Python工具。在我的示例中,该工具调用传感器(在本例中为电压传感器),然后在终端中输出结果。 该工具只有 3 行调用库的脚本:
#!/usr/bin/python
import sys
from ccube.apps.ccube_sensors import main
sys.exit(main())
我真的不知道什么是“ccube.apps.ccube_sensors”。 没关系,我只是想将 bash 中的打印结果注入到 txt 文件中,但是执行“>”不起作用。
这里是工具的使用:
/usr/bin/ccube-sensors voltage -m all > test.log
(-m 是或“机器”格式输出,“all”是所有传感器)
在终端中,它会产生:
system=12.60V battery=3.25V
但是test.log仍然是空的。 注意:数字化仪运行旧的 2.7 python,这是一个带有未知嵌入式 Linux 的 arm proc 设备。
问题在于您的 Python 滥用了
sys.exit()
函数来打印其输出。结果,它在 stderr
上打印作为参数接收的字符串,并以不成功的错误状态退出。由于在 stderr
(而不是 stdout
)上写入,消息不会被重定向。为了保持 Python 不变,您需要重定向 stderr
,如下所示:
/usr/bin/ccube-sensors voltage -m all 2> test.log
但是更好的解决方案是更改你的Python以停止滥用
sys.exit()
并使用常规的print()
函数,然后你原来的bash
脚本将起作用:
#!/usr/bin/python
from ccube.apps.ccube_sensors import main
print main()
我不了解 Python 2.7,但我相信
print()
曾经是这样工作的。