これが例です(最初に、wait.pyという名前の入力を求めるのに時間がかかる(この例では6秒)単純なpythonアプリを作成する必要がありました
待つ.py
import time
print "Sample Waiting App (waiting 6 seconds)"
time.sleep(6)
name = raw_input("Enter a Name: ")
print "Hello", name
以下は、開始、待機、入力の受け渡し、および出力の読み取りを行うコードです。
automator.py
from subprocess import Popen, PIPE, STDOUT
p = Popen(['python', 'wait.py'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
print p.communicate('Jason\n')[0]
そして、ここに何が起こっているかの内訳があります:
subprocess.Popen()
プロセスを作成し (python インタープリターを実行し、wait.py スクリプトを引数として渡す)、 に割り当てp
ます。もともと私は automator.py を 10 秒間スリープさせていました (wait.py にタイマーをクリアするのに十分な時間を与えます) が、@JFSebastian が指摘したように、このスリープは不要です。その理由は、wait.py が終了するまで「communicate()」の呼び出しがブロックされるためです。また、wait.py は stdin から読み取っているため、実際には、wait.py が読み取る前に stdin のコンテンツを埋めることができます。これは、stdin ストリームから読み取るすべてのアプリケーションに当てはまります。
- 次に、文字列
'Jason\n'
が経由p.communicate('Jason\n')[0]
でプロセスに送信され、出力が印刷されます。プロンプトと wait.py print ステートメントの出力が表示されていますが、入力は表示されていないことに注意してくださいstdout
。これは、入力したstdout
ときに入力がストリームになく、エコーされているためです。