Подпроцесс Python - Запустите команду оболочки и сделайте что-нибудь с указанным выводом команды c. - PullRequest
0 голосов
/ 23 апреля 2020

Я пишу сценарий python для автоматизации.

Мне нужно выполнить команду оболочки linux (Программа: dvbv5-zap) и дождаться определенного вывода команды c (DVR interface '/dev/dvb/adapter0/dvr0' can now be opened) ). Когда команда выводит эту строку, python должна запустить другую программу оболочки.

Я не знаю, как перехватить выходные данные подпроцесса cli, я попытался с помощью .stdout.readline(), но ничего не получил. Я запускаю команду с subprocess.Popen(['dvbv5-zap', 'args'], stdout=subprocess.PIPE)

1 Ответ

0 голосов
/ 23 апреля 2020

Я нашел свой ответ здесь: https://fredrikaverpil.github.io/2013/10/11/catching-string-from-stdout-with-python/

Фрагмент кода:

# Imports
import os, sys, subprocess

# Build command
command = [ 'python', os.join.path('/path/to', 'scriptFile.py') ]

# Execute command
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

# Read stdout and print each new line
sys.stdout.flush()
for line in iter(p.stdout.readline, b''):

    # Print line
    sys.stdout.flush()
    print(">>> " + line.rstrip())


    # Look for the string 'Render done' in the stdout output
    if 'Render done' in line.rstrip():

        # Write something to stdout
        sys.stdout.write('Nice job on completing the render, I am executing myFunction()\n' )
        sys.stdout.flush()

        # Execute something
        myFunction()
...