擅长:python、mysql、java
<p>引用<a href="http://docs.python.org/2/library/subprocess.html#popen-constructor" rel="nofollow">the docs</a>:</p>
<blockquote>
<p>If shell is True, it is recommended to pass args as a string rather than as a sequence.</p>
</blockquote>
<p>将其拆分(手动或通过<code>shlex</code>)只是让<code>subprocess</code>能够重新组合它们,这样shell就可以再次拆分它们,这是愚蠢的。在</p>
<p>我不知道你为什么认为你需要<code>shell=True</code>。(如果你没有一个好的理由,你通常不会想要它…)但是即使没有<code>shell=True</code>:</p>
<blockquote>
<p>On Windows, if args is a sequence, it will be converted to a string in a manner described in Converting an argument sequence to a string on Windows. This is because the underlying CreateProcess() operates on strings.</p>
</blockquote>
<p>所以,只需给shell命令行:</p>
<pre><code>Rcmd = r'"C:\Program Files\R\R-2.15.2\bin\Rscript.exe" vanilla C:\python\buyback_parse_guide.r'
retval = subprocess.call(Rcmd, shell=True)
</code></pre>