проверить вывод команды оболочки, используя подпроцесс в Python - PullRequest
0 голосов
/ 08 ноября 2019

Я запускаю команду оболочки в блокноте Jupyter, используя subprocess или os.system(). Фактический вывод - это дамп тысяч строк кода, который занимает по крайней мере минуту для вывода в терминал. В своей записной книжке я просто хочу знать, будет ли вывод больше, чем пара строк, потому что если бы это было ошибкой, вывод был бы только 1 или 2 строки. Какой лучший способ проверить, получаю ли я более 20 строк, а затем остановить процесс и перейти к следующему?

1 Ответ

1 голос
/ 08 ноября 2019

вы можете читать построчно, используя subprocess.Popen и считать строки (перенаправление и объединение выходных данных и потоков ошибок, возможно, объединение не требуется, зависит от процесса)

  • Если числоколичество строк превышает 20, завершите процесс и прервите цикл.
  • Если цикл заканчивается до того, как число строк достигнет 20, выведите / обработайте ошибку

код:

p = subprocess.Popen(cmd,
                     stdout=subprocess.PIPE,
                     stderr=subprocess.STDOUT)


for lineno,line in enumerate(iter(p.stdout.readline, b'')):
    if lineno == 20:
        print("process okay")
        p.kill()
        break
else:
    # too short, break wasn't reached
    print("process failed return code: {}".format(p.wait()))

обратите внимание, что p.poll() is not None может помочь выяснить, преждевременно ли закончился процесс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...