Как справиться с бесконечным выводом вызова Python cmd?
Иногда мне нужно вызвать 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))
Хотя "gcc -v" фактически завершается, некоторые другие команды, с которыми я столкнулся, не работали. Есть ли более элегантный и стабильный способ решить эту проблему? Я читал некоторые предложения по прекращению синтаксического анализа по прошествии определенного времени вместо строк, но мне это тоже кажется грязным.
1 ответ
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