擅长:python、mysql、java
<p>首先,也最重要的是,您实际上不需要管道;您只是发送输入。你可以用<a href="http://docs.python.org/library/subprocess.html#subprocess.Popen.communicate" rel="noreferrer">subprocess.communicate</a>来做。</p>
<p>其次,不要将命令指定为字符串;只要涉及到带有空格的文件名,这就很混乱。</p>
<p>第三,如果您真的想执行piped命令,只需调用shell。在Windows上,我相信是<code>cmd /c program name arguments | further stuff</code>。</p>
<p>最后,单反斜杠可能很危险:<code>"\p"</code>是<code>'\\p'</code>,但是<code>'\n'</code>是一个新行。使用<a href="http://docs.python.org/library/os.path.html#os.path.join" rel="noreferrer">os.path.join()</a>或<a href="http://docs.python.org/library/os.html#os.sep" rel="noreferrer">os.sep</a>,如果在python外部指定,则只使用正斜杠。</p>
<pre><code>proc = subprocess.Popen(
['C:/Program Files/GNU/GnuPG/gpg.exe',
'--batch', '--passphrase-fd', '0',
'--output ', 'c:/docume~1/usi/locals~1/temp/tmptlbxka.txt',
'--decrypt', 'test.txt.gpg',],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
stdout_value, stderr_value = proc.communicate('bosco')
</code></pre>