Я пишу сценарий для получения номеров версий из программ командной строки, используя соответствующий им флаг командной строки 'version', например --version, -v и т. Д. Программа в целом использует регулярное выражение, чтобы получить только фактический номер версии из текстового вывода и затем сравнивает его с различными условиями минимальной требуемой или максимально допустимой версии, извлеченной из файла конфигурации xml и т. д.
Сценарий отлично работает до выполнения bzip2.
Для большинства программ нет проблем со следующим кодом:
args = 'cmd --version'
output = subprocess.getstatusoutput(args)
довольно резкий и сухой. Тем не мение! Если вы попробуете это, скажем, с помощью bzip2 (и до сих пор это единственная программа, с которой у меня возникла проблема), ala 'bzip2 --version' python "зависает", и вы должны нажать ctrl-C, чтобы выйти без записи. конечно.
Я пробовал различные варианты, такие как прохождение длинного маршрута, т. Е .:
import subprocess
from subprocess import PIPE, STDOUT
proc = subprocess.Popen(args, stdout=PIPE, stderr=STDOUT)
while(True):
code = proc.poll()
if(code is not None):
break
line = proc.stdout.readline() # or even read()
etc.
Независимо от того, какой метод я использую для извлечения соответствующего текста, Python всегда зависает после определенного момента. Я пытался .kill () в определенных точках, чтобы избежать события блокировки, но безрезультатно.
Я думаю, что это только с bzip2, потому что по какой-то причине он все еще ожидает ввода с флагом --version.
Есть мысли?