蟒蛇子流程-怎么称呼一个管道命令在窗口?
-
20-08-2019 - |
题
我怎么运行这个命令和子进程的?
我试过:
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
我注意到:
- 运行命令的窗户上 控制台运作的罚款。
- 如果我删除了 回bosco|部分,它的正常运行的 该popen呼吁以上。所以我觉得 这个问题是关系到回音或 |.
解决方案
首先,你实际上并不需要一个管道;你只是发送的输入。你可以使用 子流程.沟通 为。
其次,不指定的命令作为串;这就是混乱的,尽快作为文件与空间都参与其中。
第三,如果你真想要执行一个管道命令,就打电话的外壳。在Windows,我相信这是 cmd /c program name arguments | further stuff
.
最后,单一的背斜线可以是危险的: "\p"
是 '\\p'
, 但 '\n'
是一个新的线.使用 操作系统。路径。join() 或 操作系统。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')
其他提示
你是对的,的回声问题。没有外壳=真正的选择ECHO命令不能被发现。
这种失败的错误你看到的:
subprocess.call(["ECHO", "Ni"])
这种通行证:印Ni和0
subprocess.call(["ECHO", "Ni"], shell=True)
不隶属于 StackOverflow