回答:
あなたがチェックアウトする場合は、Pythonのドキュメントのサブプロセスセクションを、あなたは、交換方法の例があり気づくos.system()
とはsubprocess.Popen()
:
sts = os.system("mycmd" + " myarg")
...と同じことをします...
sts = Popen("mycmd" + " myarg", shell=True).wait()
「改良された」コードはもっと複雑に見えますがsubprocess.Popen()
、一度知ってしまえば、他に何も必要ないので、より良いです。subprocess.Popen()
他のいくつかのツール(os.system()
3つのPythonモジュールに散在していたこれらの1つにすぎません)をます。
それが役立つ場合は、subprocess.Popen()
非常に柔軟であると考えてくださいos.system()
。
shell=True
。このオプションがあることはsubprocess.Popen()
、そのヘルパー機能の利点の1つです。
os.system
とsubprocess.call/popen/run
仕上げにコマンドのブロック/待機を行います。stackoverflow.com/a/14059648/4752883
os.system
Unix system
コマンドに相当しsubprocess
ますが、ヘルパーモジュールは、Popen
コマンドによって提供される多くの機能をより簡単で制御可能なインターフェースで提供するために作成されました。それらは、Unix Popenコマンドと同様に設計されました。
system()
を呼び出してcommandで指定されたコマンドを実行し、コマンド/bin/sh -c command
が完了した後に戻ります
一方:
この
popen()
関数は、パイプを作成し、分岐し、シェルを呼び出すことによってプロセスを開きます。
どれを使用するかを考えてsubprocess
いる場合は、実行のためのすべての機能に加えて、プロセスに対する追加の制御機能があるため、間違いなく使用してください。
Windowsでpython(cpython)を実行すると、<built-in function system>
os.systemは_wsystemのカーテンの下で実行されますが、Windows以外のOSを使用している場合は、systemを使用します。
逆に、PopenはWindows ではCreateProcessを、posixベースのオペレーティングシステムでは_posixsubprocess.fork_execを使用する必要があります。
とはいえ、重要なアドバイスはos.systemのドキュメントにあります。
サブプロセスモジュールは、新しいプロセスを生成してその結果を取得するためのより強力な機能を提供します。この関数を使用するよりも、そのモジュールを使用する方が適切です。いくつかの役立つレシピについては、サブプロセスドキュメントの「古い関数をサブプロセスモジュールで置き換える」セクションを参照してください。
sts = p.wait()
最終行の代わりに使用することもできます。