Как бороться с бесконечным выводом вызова python cmd? - PullRequest
1 голос
/ 17 января 2020

иногда мне нужно вызвать cmd в моей программе python и хотел бы проанализировать вывод. В большинстве случаев вызов cmd выполняет свое действие, печатает пару строк и завершается. К сожалению, некоторые команды cmd, кажется, никогда не завершаются и продолжают печатать пустые строки. Поэтому я начал считать прочитанные строки и просто остановиться в какой-то момент. Пример кода:

from subprocess import Popen
from subprocess import PIPE
from subprocess import STDOUT

command = ["gcc", "-v"]

try:
    process = Popen(command, bufsize=1, universal_newlines=True, stdout=PIPE, stderr=STDOUT)

    if process.returncode:
        print("Cmd command {} was spawned successfully, yet an error occuring during the execution of the command".format(command))

    lineCounter = 0
    for line in iter(process.stdout.readline, ''):
         if(lineCounter < 50):
             print(line)
             lineCounter += 1
         else:
             break

except Exception as exceptionError:
     print("Command {} can't be started. Error message: {}".format(command, exceptionError))

Хотя «g cc -v» фактически завершается, некоторые другие команды, с которыми я столкнулся, не выполнялись. Есть ли более элегантный и стабильный способ решить эту проблему? Я прочитал некоторые предложения прекратить анализ после определенного количества времени вместо строк, но это также кажется мне немного грязным.

1 Ответ

0 голосов
/ 20 января 2020
lineCounter = 0
prevLine = ''
for line in iter(process.stdout.readline, ''):
     print(line)
     if line == prevLine:
         lineCounter += 1
         if lineCounter > 50:
             break
     else:
         prevLine = line
         lineCounter = 0
...