@ otorrillasの回答をいくつかの例で展開します。
成功しているかどうかを気にするだけの短いスクリプトがあるとしたら、今すぐ実行して結果を待っているとします。たとえば、単一のpingをリモートマシンに送信したいとします。
res = call(['ping', '127.0.0.1', '-c', '1', '-W', '1'])
# res is 0 if the ping succeeded, non-zero if it failed.
は今、あなたはあなたが仮定したいコマンドが成功するために起こっている、とあなたが何かのために使用するいくつかの出力を与えるために起こっている持っていることを言う:call
はあなたのためのものです。 check_call
はあなたのためです。おそらく、Subversionのコマンド:一般的に
svn_output = check_call(['svn', 'info', path_to_my_working_copy])
# svn_output now contains the svn info output. If it failed, an
# exception is thrown which more easily allows you to give
# responsibility of that failure to whoever passed us the wrong
# path_to_my_working_copy.
、ご利用の場合は、単にそれらのカテゴリの1に該当しない場合、あなたはおそらくPopen
を使用して巻くしようとしています。
単純なユースケースの1つは、起動したいデーモンプロセスがあるとしますが、それからあなたのPythonプロセスと一緒に実行することができます。今、あなたはPopen
を使用します。
my_proc = Popen(['my-daemon'])
# We're going to go and do something else now, but want to make sure
# my_proc dies when we do.
import atexit
atexit.register(my_proc.kill)
NB:あなたは生のPopen
を使用する場合は、あなたは私が示されているようあなたはおそらくatexit
を使用して、プロセスを終了を確認する必要があります。
*「非ゼロ」の終了ステータスはプロセスが失敗したことを意味します。Tolstoyに帰属する有名なコンピュータサイエンスの引用は、 "ハッピープロセスはすべて似ています;すべての不幸なプロセスはそれ自身の方法で不幸です"つまり、プロセスが幸せになる方法は1つだけです:0を返すこと。不幸になる方法はたくさんあります。
次の投稿は、あなたの質問に部分的に答えています。 http://stackoverflow.com/questions/7681715/whats-the-difference- between-subprocess-popen-and-call-how-can-i-use-them – bergercookie