当使用subprocess.Popen(args, shell=True)
运行“ gcc --version
”(仅作为示例)时,在 Windows 上我们得到:
>>> from subprocess import Popen
>>> Popen(['gcc', '--version'], shell=True)
gcc (GCC) 3.4.5 (mingw-vista special r3) ...
所以它很好地打印出我所期望的版本。但在 Linux 上,我们得到这个:
>>> from subprocess import Popen
>>> Popen(['gcc', '--version'], shell=True)
gcc: no input files
因为 gcc 还没有收到这个--version
选项。
文档没有具体说明在 Windows 下 args 应该发生什么,但它确实说,在 Unix 上,“如果 args 是一个序列,第一项指定命令字符串,并且任何额外的项目都将被视为额外的 shell 参数。” 恕我直言,Windows 方式更好,因为它允许您将Popen(arglist)
呼叫视为与呼叫相同Popen(arglist, shell=True)
。
为什么这里有 Windows 和 Linux 的区别?