1. ホーム
  2. python

[解決済み] Pythonから非同期で外部コマンドを実行するにはどうしたらいいですか?

2022-05-06 15:03:31

質問

Pythonスクリプトから非同期にシェルコマンドを実行する必要があります。つまり、外部コマンドの実行中にPythonスクリプトの実行を継続させ、必要な処理をさせたいのです。

この投稿を読みました。

<ブロッククオート

Pythonで外部コマンドを呼び出す

その後、いくつかのテストを行ってみたところ、次のようになりました。 os.system() を使用すれば、うまくいきます。 & をコマンドの最後に書くことで、コマンドの返送を待つ必要がありません。私が疑問に思っているのは、このようなことを達成するための適切な方法なのかどうかということです。私は commands.call() が、外部コマンドでブロックされるため、私にはうまくいきません。

を使うかどうか教えてください。 os.system() を使用することが望ましいのか、それとも他の方法を試すべきでしょうか。

解決方法は?

subprocess.Popen は、まさにあなたが望んでいることを実現しています。

from subprocess import Popen
p = Popen(['watch', 'ls']) # something long running
# ... do other stuff while subprocess is running
p.terminate()

(コメントから答えを完成させるために編集)

Popenインスタンスは、あなたができるように、他の様々なことを行うことができます。 poll() を使用して、まだ実行されているかどうかを確認することができます。 communicate() を使って標準入力にデータを送り、終了するのを待ちます。