如果我从cmd.exe
运行以下命令,我会收到一条如下所示的错误消息:
C:\Users\user>ctaags --help
'ctaags' is not recognized as an internal or external command,
operable program or batch file.
现在,如果我使用Python的subprocess
模块运行相同的命令,我会收到不同的警告:
>>> subprocess.Popen(['ctaags', '--help'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\Python27\lib\subprocess.py", line 711, in __init__
errread, errwrite)
File "c:\Python27\lib\subprocess.py", line 948, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
根据其他命令,我希望Popen
的输出完全匹配shell给我回来的内容,即:
WindowsError: [Error 2] 'ctaags' is not recognized as an internal or
external command, operable program or batch file.
事实并非如此。为什么呢?
答案 0 :(得分:2)
运行该进程的系统调用返回错误2,无论它是由shell调用还是从Python调用。
在shell案例中, shell 会生成“无法识别”的消息。
使用subprocess.Popen()
没有shell=True
(你不应该使用),没有shell,所以你自己得到原始错误代码。
答案 1 :(得分:1)
除非你设置shell = True:
,否则Popen不会使用shell执行命令subprocess.Popen(['ctaaags', '--help'], shell=True)