【问题标题】:Run bash command in python script for X seconds在 python 脚本中运行 bash 命令 X 秒
【发布时间】:2012-11-05 21:49:36
【问题描述】:

我有一个 gps 连接到我的树莓派,并试图用它对来自传入相机的照片进行地理标记。通过发出命令“gpsd -nND2 /dev/ttyUSB0”,我可以获得连续 gps 数据的 bash echo 输出,以后可以解析这些数据。但是,我只需要平均 10 个左右的数据点(在 10 秒内收集),然后想关闭 gpsd。

我的一般延时摄影程序是用 python 编写的,所以这是我目前所拥有的:

(stdout, stderr) = Popen(["gpsd","-nND2,"/dev/ttyUSB0"], stdout=PIPE).communicate()

不幸的是,这将向变量 stdout 输出我无法解析的无限数量的数据点。输出很像一个永无止境的 ping 例程。如何停止数据收集以进行合理/可解析的数据转储?

感谢您的帮助。

【问题讨论】:

    标签: python raspberry-pi gpsd


    【解决方案1】:

    根据the docs,您应该查看控制台输出,而是使用gps<b>d</b>作为daemon,通过TCP与其通信:

    客户端应用程序将通过 TCP/IP 端口(默认为 2947)与 gpsd 通信。

    【讨论】:

    • 有一个专门为 gpsd 制作的 python gps 模块。感谢您为我指明正确的轨道
    【解决方案2】:

    这行得通吗?我没有测试过。

    proc = Popen(["gpsd","-nND2","/dev/ttyUSB0"], stdout=PIPE)
    
    samples = []
    for _ in range(10):
        samples.append(proc.stdout.readline())
    
    proc.terminate()
    

    【讨论】:

    • 当我运行它时,它不会终止 gpsd。我知道如何让它停止的唯一方法是 Ctrl+Shift+C 它。
    • terminate 方法替换为kill 方法。或发送过程SIGINT。看看 Eric 的解决方案——我不熟悉gpsd,但听起来它有一个用于通信的套接字(通过他的回复)。如果守护进程支持,那将是正确的方法。
    猜你喜欢
    • 1970-01-01
    • 2018-08-19
    • 2014-10-04
    • 2020-05-26
    • 2012-03-07
    • 2014-12-01
    • 2014-12-02
    • 2015-04-11
    • 1970-01-01
    相关资源
    最近更新 更多