Вывод привязки / конвейера run() в / в функцию в python3 (lynux)
Я пытаюсь использовать вывод внешней программы, используя функцию запуска. эта программа регулярно выдает ряд данных, которые мне нужно использовать в моем скрипте. Я нашел библиотеку подпроцесса и использовал ее run()
/check_output()
Пример:def usual_process():
# some code here
for i in subprocess.check_output(['foo','$$']):
some_function(i)
Теперь предположим, что foo уже находится в переменной PATH и выводит строку в полуслучайных периодах.
Я хочу, чтобы программа делала свои вещи и запускала some_function(i)
каждый раз foo отправляет новую строку на свой выход.
что сводится к двум проблемам. передача вывода в цикл for и запуск в качестве фонового подпроцесса. Спасибо
Обновление: мне удалось получить вывод foo на some_function с помощью этой
with os.popen('foo') as foos_output:
for line in foos_output:
some_function(line)
В соответствии с этим os.popen не рекомендуется использовать, но мне еще предстоит выяснить, как передавать внутренние процессы в python. Теперь просто нужно выяснить, как запустить эту функцию в фоновом режиме.
1 ответ
Итак, я решил это. Первым шагом было запустить внешний скрипт:proc=Popen('./cisla.sh', stdout=PIPE, bufsize=1)
Затем я запустил функцию, которая будет читать его и передал ему канал
def foo(proc, **args):
for i in proc.stdout:
'''Do all I want to do with each'''
foo(proc).start()`
Ограничения: Если вы хотите поймать ошибку сценариев, вы должны будете ее передать.
во-вторых, если вы убиваете parrent, он оставляет зомби, так что не забывайте убивать child в обработке сигналов