2

Python を使用して外部プログラムを実行しています。また、Python が呼び出されたプログラムにいくつかのキーストロークを送信して、自動ログインを完了するようにしたいと考えています。

問題は、subprocess.call() を使用して外部プログラムを実行したときに、プログラムがシステム フォーカスを取得し、外部プログラムを閉じるまで Python スクリプトが応答できなかったことです。

これについて何か提案はありますか?どうもありがとう。

4

1 に答える 1

6

subprocess.Popen()の代わりに使用.call()

stdin 、stdout、およびstderrファイル記述Popenも制御できるため、外部プログラムとやり取りできる可能性があります。

愚かな例:

s = subprocess.Popen(command, stdout=subprocess.PIPE, 
                     stderr=subprocess.PIPE) # The script is not blocked here

# Wait to finish
while s.poll() is None: # poll() checks if process has finished without blocking
    time.sleep(1)
    ... # do something

# Another way to wait
s.wait() # This is blocking

if s.returncode == 0:
    print "Everything OK!"
else:
    print "Oh, it was an error"

いくつかの便利な方法:

Popen.poll() 子プロセスが終了したかどうかを確認します。returncode 属性を設定して返します。

Popen.wait() 子プロセスが終了するのを待ちます。returncode 属性を設定して返します。

Popen.communicate(input=None) プロセスと対話: stdin にデータを送信します。ファイルの終わりに達するまで、stdout および stderr からデータを読み取ります。プロセスが終了するのを待ちます。オプションの入力引数は、子プロセスに送信する文字列にするか、データを子プロセスに送信しない場合は None にする必要があります。

ドキュメントにはさらに多くの情報があります

于 2012-05-31T08:59:40.503 に答える