擅长:python、mysql、java
<p>如果“somescript.py”不是通常可以直接从命令行执行的命令(即<code>$: somescript.py</code>works),则不能使用call直接调用它。</p>
<p>请记住,Popen的工作方式是,第一个参数是它执行的程序,其余的是传递给该程序的参数。在这种情况下,程序实际上是<em>python</em>,而不是脚本。因此,以下操作将如您所料:</p>
<pre><code>subprocess.call(['python', 'somescript.py', somescript_arg1, somescript_val1,...]).
</code></pre>
<p>这将正确调用Python解释器,并告诉它使用给定的参数执行脚本。</p>
<p>请注意,这与上述建议不同:</p>
<pre><code>subprocess.call(['python somescript.py'])
</code></pre>
<p>这将尝试执行名为<em>python somscript.py</em>的程序,该程序显然不存在。</p>
<pre><code>call('python somescript.py', shell=True)
</code></pre>
<p>也会起作用,但使用字符串作为输入来调用不是跨平台的,如果不是您构建字符串的人,则会很危险,并且通常应尽可能避免。</p>