Warum Teilprozess.Popen() mit shell=True anders funktionieren auf Linux vs Windows?

Bei der Verwendung subprocess.Popen(args, shell=True) zu laufen "gcc --version" (nur als Beispiel), auf Windows bekommen wir dies:

>>> from subprocess import Popen
>>> Popen(['gcc', '--version'], shell=True)
gcc (GCC) 3.4.5 (mingw-vista special r3) ...

Damit es ordentlich Druck aus der Fassung, als ich erwarte. Aber auf Linux bekommen wir dies:

>>> from subprocess import Popen
>>> Popen(['gcc', '--version'], shell=True)
gcc: no input files

Weil gcc noch nicht erhielt die --version option.

Den docs nicht genau angeben, was geschehen soll, um die Argumente unter Windows ist, aber er sagt, auf Unix, "Wenn args ist eine Sequenz, das erste Element gibt den Befehl, und alle weiteren Elemente werden so behandelt, als zusätzliche shell-Argumente". IMHO der Windows-Weg ist besser, weil es erlaubt, Sie zu behandeln Popen(arglist) ruft die gleiche wie Popen(arglist, shell=True) lieben.

Warum der Unterschied zwischen Windows und Linux hier?

Es ist in der Regel eine gute Idee, um die version von Python geben, die Sie verwenden, oder zumindest, wenn es die Linie 2 oder 3.

InformationsquelleAutor Ben Hoyt | 2009-08-10

Schreibe einen Kommentar