擅长:python、mysql、java
<blockquote>
<p>What is the best way to avoid the failure of subprocess killing the main process?</p>
</blockquote>
<p>当然,以适当的方式处理异常并继续前进。在</p>
<pre><code>try:
subprocess.call(dlnd_cmd)
except OSError as e:
print 'failed to download: {!r}'.format(e)
</code></pre>
<p>但是,这在这里可能不合适。<code>subprocess.call</code>引发的异常通常不是暂时的,您可以记录并解决它;如果它现在不起作用,它将永远无法工作,直到您修复了底层问题(脚本中的一个错误,或者<code>gtdownload</code>没有正确安装,等等)。在</p>
<p>例如,如果您向我们展示的代码是您的实际代码:</p>
^{pr2}$
<p>…那么这保证会引发一个<code>OSError</code>,原因在dano的回答中解释了:<code>call</code>(不带<code>shell=True</code>)将尝试将整个字符串空间、shell重定向等作为在<code>$PATH</code>上查找的可执行程序的名称。没有这样的计划。因此它将引发一个<code>OSError(errno.ENOENT)</code>。(这正是您所看到的)仅仅记录日志对您没有任何好处;您的整个进程都在退出是一件好事,所以您可以调试该问题。在</p>