При использовании 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, но в Unix говорится: "Если args - это последовательность, первый элемент указывает строку команды, а любые дополнительные элементы будут обрабатываться как дополнительные аргументы оболочки". ИМХО путь Windows лучше, потому что он позволяет обрабатывать вызовы Popen(arglist)
так же, как Popen(arglist, shell=True)
.
Почему здесь разница между Windows и Linux?