私はPython経由で外部プログラムを実行しています.外部プログラムが入力を要求した場合、私のPythonスクリプトは入力を求め、それらの入力で再度実行を続ける必要があります..
プロセスの stdin が入力を受け入れるためにアクティブかどうかを確認する方法はありますか?
コンソールが 10 秒間アイドル状態の場合、 inputを
待機する可能性があると仮定します。
注: 常にこのケースであるとは限りません。たとえば、スレッドがスリープしている場合など..,
しかし、簡単にするために、前者を想定しました.
そう、
process=subprocess.Popen(['some_process_with_inputs'],shell=true,stdin=subprocess.PIPE)
start = time.time()
time_to_wait_for_idleness=10
while 1:
ret=process.poll()
if ret == None and (time.time() - start) > time_to_wait_for_idleness:
#Waiting for input possibly.. Do things here ie.. process.communicate()
time.sleep(1)
単なる提案で、誰かを助けるかもしれません。回答ありがとうございます。
pexpect モジュールを見てみましょう:
http://www.noah.org/wiki/pexpect
プロセスを実行して特定のパターンを待ってから、入力を送信して結果を読み取ることができます。何を期待しているかを知る必要があり、入力プロンプトが表示されるまで特定のタイムアウトが発生するまで待つ必要があります。
プログラムがプロンプトを表示するタイミングが完全にランダムである場合は、さらに複雑になります。