Запустите команду bash в скрипте python на X секунд

У меня есть GPS, подключенный к моему raspberry pi, и я пытаюсь использовать его для геотегирования фотографий с входящей камеры. Введя команду «gpsd -nND2 /dev/ttyUSB0», я могу получить выходные данные bash echo с непрерывными данными GPS, которые впоследствии можно будет проанализировать. Однако мне нужно только усреднить 10 точек данных или около того (собранных за 10 секунд), и после этого я хочу закрыть gpsd.

Моя общая программа timelapse написана на python, так что пока что у меня есть:

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

К сожалению, это выведет в переменную stdout неограниченное количество точек данных, которые я не смогу разобрать. Результат очень похож на бесконечную процедуру проверки связи. Как я могу остановить сбор данных, чтобы сделать разумный/разборчивый дамп данных?

Спасибо за помощь.


person mh00h    schedule 05.11.2012    source источник


Ответы (2)


Согласно документам, вы не должны не смотреть на вывод консоли , и вместо этого использовать gpsd в качестве daemon, связываясь с ним через TCP:

Клиентские приложения будут связываться с gpsd через порт TCP/IP (по умолчанию 2947).

person Eric    schedule 05.11.2012
comment
есть модуль python gps, сделанный только для gpsd. спасибо, что указали мне на правильный путь - person mh00h; 06.11.2012

Это работает? Я не проверял это.

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

samples = []
for _ in range(10):
    samples.append(proc.stdout.readline())

proc.terminate()
person tMC    schedule 05.11.2012
comment
Когда я запускаю это, он не завершает работу gpsd. Единственный известный мне способ остановить его — это нажать Ctrl+Shift+C. - person mh00h; 06.11.2012
comment
замените метод terminate на метод kill. Или отправьте прок SIGINT. Взгляните на решение Эрика - я не разбираюсь в gpsd, но похоже, что у него есть сокет для связи (из его ответа). Это был бы правильный путь, если бы демон его поддерживал. - person tMC; 06.11.2012