<p>以一些例子来阐述“奥托里拉”的答案。</p>
<p>假设你有一个简短的脚本,你只关心它是否成功*,你只想现在就做,然后等待结果。例如,假设您想向远程计算机发送一个ping。<code>call</code>是您的选择:</p>
<pre><code>res = call(['ping', '127.0.0.1', '-c', '1', '-W', '1'])
# res is 0 if the ping succeeded, non-zero if it failed.
</code></pre>
<p>现在假设你有一个命令,你想假设它会成功,并且会给你一些你想用来做某事的输出。<code>check_output</code>是给你的。也许是一个subversion命令:</p>
<pre><code>svn_output = check_output(['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.
</code></pre>
<p>一般来说,如果您的用例不属于这些类别中的一个,那么您可能最终会使用<code>Popen</code>。</p>
<p>一个简单的用例可能是,假设您有一个要启动的守护进程,但随后会与您的python进程一起运行。现在使用<code>Popen</code>:</p>
<pre><code>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)
</code></pre>
<p><strong>NB:</strong>如果使用<code>Popen</code>raw,则必须确保终止进程,可能使用<code>atexit</code>如我所示。</p>
<p>*“非零”退出状态表示进程失败。一个著名的计算机科学引述到<a href="http://literature.org/authors/tolstoy-leo/anna-karenina/part-01/chapter-01.html" rel="nofollow noreferrer">Tolstoy</a>是“快乐的过程都是相似的;每一个不快乐的过程都以自己的方式不快乐”,也就是说,只有一个过程是快乐的:返回0。其他的事情都不快乐,但是有很多不快乐的方法。</p>