Вывод привязки / конвейера 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 в обработке сигналов

Другие вопросы по тегам