適切な「バージョン」コマンドラインフラグ、つまり--version、-vなどを使用して、コマンドラインプログラムからバージョン番号を取得するスクリプトを作成しています。プログラムは全体として、正規表現を使用してテキストから実際のバージョン番号を取得します出力し、xml conf ファイルなどから取得した最小要件または最大許容バージョンのさまざまな条件と比較します。
スクリプトは、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() を試しましたが、役に立ちませんでした。
何らかの理由で --version フラグを使用した入力がまだ期待されているため、bzip2 だけだと思います。
何かご意見は?