1

パラメータを渡しながら、Python からコマンド exe を実行しようとしています。他のいくつかの質問を見てきましたが、私の質問が異なる理由は、最初にいくつかのパラメーターを渡しながらcmd exeプログラムを呼び出したいためです。次に、exeがいくつかのプロンプトを表示するまで10秒待つ必要がありますユーザー名、そしていくつかのパスワード。次に、この出力をファイルにパイプします。

プロセスが既に呼び出されている場合、より多くの引数を渡す方法はありますか? cmd exeを開いたままにするにはどうすればよいですか。呼び出すとすぐにプロセスが停止するためです。

ありがとう

4

2 に答える 2

1

これが例です(最初に、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]

そして、ここに何が起こっているかの内訳があります:

  1. subprocess.Popen()プロセスを作成し (python インタープリターを実行し、wait.py スクリプトを引数として渡す)、 に割り当てpます。もともと私は automator.py を 10 秒間スリープさせていました (wait.py にタイマーをクリアするのに十分な時間を与えます) が、@JFSebastian が指摘したように、このスリープは不要です。その理由は、wait.py が終了するまで「communicate()」の呼び出しがブロックされるためです。また、wait.py は stdin から読み取っているため、実際には、wait.py が読み取る前に stdin のコンテンツを埋めることができます。これは、stdin ストリームから読み取るすべてのアプリケーションに当てはまります。
  2. 次に、文字列'Jason\n'が経由p.communicate('Jason\n')[0]でプロセスに送信され、出力が印刷されます。プロンプトと wait.py print ステートメントの出力が表示されていますが、入力は表示されていないことに注意してくださいstdout。これは、入力したstdoutときに入力がストリームになく、エコーされているためです。
于 2013-06-25T21:28:25.767 に答える