當使用subprocess.Popen(args, shell=True)
運行「gcc --version
」(就像一個例子),在Windows中,我們得到這樣的:爲什麼subprocess.Popen()在Linux上殼=真正的工作方式不同VS的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下的參數應該發生什麼,但它確實說在Unix上,「如果args是一個序列,第一個項目指定命令字符串,並且任何其他項目將視爲額外的shell參數「。恕我直言Windows的方式比較好,因爲它可以讓你把Popen(arglist)
調用一樣Popen(arglist, shell=True)
的。
爲什麼Windows和Linux的區別在這裏?
通常包含您正在使用的Python版本或者至少如果是第2行或第3行是一個好主意。 – mloskot 2011-12-19 19:49:17