stdinとstdoutを介して送受信されるメッセージを介して制御される外部プロセスを起動する必要があります。subprocess.Popenを使用してプロセスを開始することはできますが、必要に応じてstdinを介して実行を制御することはできません。
私が完了しようとしていることの流れは次のとおりです。
- 外部プロセスを開始します
- いくつかのステップを繰り返します
- stdinに改行文字を書き込んで、次の処理ステップを完了するように外部プロセスに指示します
- stdoutに改行文字を書き込んで、外部プロセスがステップの完了を通知するのを待ちます
- 外部プロセスのstdinを閉じて、実行が完了したことを外部プロセスに示します。
私はこれまでに次のことを思いついた:
process = subprocess.Popen([PathToProcess], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
for i in xrange(StepsToComplete):
print "Forcing step # %s" % i
process.communicate(input='\n')
上記のコードを実行すると、「\ n」は外部プロセスに伝達されず、ステップ#0を超えることはありません。コードはprocess.communicate()でブロックされ、それ以上先に進みません。通信()メソッドを間違って使用していますか?
また、「外部プロセスが新しい行を書き込むまで待機する」機能をどのように実装しますか?