gpt4 book ai didi

Python - 子进程 - 如何在 Windows 中调用管道命令?

转载 作者:太空狗 更新时间:2023-10-30 00:27:13 24 4
gpt4 key购买 nike

如何使用子进程运行此命令?

我试过:

proc = subprocess.Popen(
'''ECHO bosco|"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()

但是得到了:

Traceback (most recent call last):
...
File "C:\Python24\lib\subprocess.py", line 542, in __init__
errread, errwrite)
File "C:\Python24\lib\subprocess.py", line 706, in _execute_child
startupinfo)
WindowsError: [Errno 2] The system cannot find the file specified

我注意到的事情:

  1. 在 Windows 上运行命令控制台工作正常。
  2. 如果我删除ECHO博斯科|部分,它运行良好上面的 popen 调用。所以我认为这个问题与 echo 或|.

最佳答案

首先,您实际上并不需要管道;您只是在发送输入。您可以使用 subprocess.communicate为此。

其次,不要将命令指定为字符串;一旦涉及到带空格的文件名,那就很麻烦了。

第三,如果你真的想执行管道命令,只需调用 shell。在 Windows 上,我相信它是 cmd/c program name arguments |更多内容

最后,单反斜杠可能是危险的:"\p"'\\p',但是 '\n' 是一条新线。使用 os.path.join()os.sep或者,如果在 python 外部指定,则只是一个正斜杠。

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')

关于Python - 子进程 - 如何在 Windows 中调用管道命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1046474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com