2011-12-13 10 views
3

私は、私がpythonからトリガしようとしている外部プロセスがあり、Popen.stdin.communicate()経由で情報を送信しています。私が話しているプロセスでは、stdoutにいくつかの行を書き込んだ後、stdin(数字)を使って入力を求めるプロンプトが表示され、stdinを介して2番目の入力を求めるプロンプトが表示されます。私はマニュアル入力を私のためにこれを自動化するpythonスクリプトに置き換えたいと思う。予想通り、サブプロセスの動作python popen.communicate()複数のstdinの書き込みで

working_file = subprocess.Popen(["/pyRoot/iAmACrashyProgram"], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE) 
working_file.communicate(input=b'3')[0] 

し、それは、第2の入力、残念ながら通信する()のdoesntの入力を要求してみましょうように見える:これまでのところ私は、ユーザー入力の最初のラウンドを提出するのは良い仕事をして、次のコードを持っていますあなたはstdinに複数回書く。私が試した次のことは、これで前の行置き換えた:

working_file = subprocess.Popen(["/pyRoot/iAmACrashyProgram"], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE) 
working_file.stdin.write(b'3') 
working_file.stdin.write(b'7') 

を、それがあることを受信したときので、おそらくデータがどこかに行っているが、サブプロセスは、データを取得していない(私はこれを知っているので、私はエラーを取得していませんログファイルに書き込むデータ)。明らかに何かを理解していないのですが、私はstdinに書き込む代わりの方法を見つけることができるように、communications()が何をしているのかをうまく判断できないようにしたいのですが、私もバッファーやストリームの専門家ではないので、私を踏み外しています。

comunicateオブジェクトがどのように動作するか、somethignと同様のやり方で複数の書き込みを行うことができるかもしれません。誰もストリームとバッファーを読む良い場所はどこですか?

感謝

JON

答えて

0

としてあたりのpythonのdocumentation:あなたは、プロセスの標準入力にデータを送信したい場合は、標準入力でpopenのオブジェクトを作成 する必要があること

=パイプ。同様に、結果タプルにNone以外の何かを得るには、stdout = PIPE および/またはstderr = PIPEを与える必要があります。

+0

こんにちは、PIPE属性のサブプロセスの作成を表示するようにポストを変更しました。私はそうしました。私はそう思っていました。プレゼント、jt –

関連する問題