1. ホーム
  2. python

[解決済み] Python の popen コマンドです。コマンドが終了するまで待ちます。

2023-01-07 10:05:46

質問

popen でシェルコマンドを起動するスクリプトがあります。 問題は、スクリプトが popen コマンドが終了するまで待たず、すぐに続行することです。

om_points = os.popen(command, "w")
.....

Pythonスクリプトに、シェルコマンドが終了するまで待つように指示するにはどうすればよいですか?

どのように解決するのですか?

スクリプトをどのように動作させたいかによって、2つのオプションがあります。もし、コマンドをブロックして実行中は何もしないようにしたい場合は、単に subprocess.call .

#start and block until done
subprocess.call([data["om_points"], ">", diz['d']+"/points.xml"])

実行中に何かをしたい場合、あるいは何かを stdin を使うことができます。 communicate の後に popen を呼び出します。

#start and process things, then wait
p = subprocess.Popen([data["om_points"], ">", diz['d']+"/points.xml"])
print "Happens while running"
p.communicate() #now wait plus that you can send commands to process

ドキュメントに記載されているように wait はデッドロックする可能性があるので、通信することが望ましいです。