擅长:python、mysql、java
<p><code>Popen</code>的第一个参数是一个包含命令名及其参数的列表。<code>></code>不是命令的参数,而是shell语法。您可以<em>简单地将整行传递给<code>Popen</code>,并指示它使用shell执行它:</p>
<pre><code>process = subprocess.Popen(bashCommand, shell=True)
</code></pre>
<p>(请注意,由于您正在将命令的输出重定向到文件,因此没有理由将其标准输出设置为管道,因为将没有任何内容可读取。)</p>
<p>不过,更好的解决方案是让Python处理重定向。你知道吗</p>
<pre><code>process = subprocess.Popen(['pdfcrack', '-f', 'pdf123.pdf'], stdout=subprocess.PIPE)
with open('myoutput.txt', 'w') as fh:
for line in process.stdout:
fh.write(line)
# Do whatever else you want with line
</code></pre>
<hr/>
<p>另外,不要用<code>str.split</code>代替shell的分词。像<code>pdfcrack -f "foo bar.pdf"</code>这样的有效命令行将被拆分为不正确的列表<code>['pdfcrack', '-f', '"foo', 'bar.pdf"']</code>,而不是正确的列表<code>['pdfcrack', '-f', 'foo bar.pdf']</code>。你知道吗</p>