Quando si utilizza subprocess.Popen(args, shell=True)
di eseguire "gcc --version
" (tanto per fare un esempio), su Windows otteniamo questo:Perché subprocess.Popen() con shell = True funziona in modo diverso su Linux vs Windows?
>>> from subprocess import Popen
>>> Popen(['gcc', '--version'], shell=True)
gcc (GCC) 3.4.5 (mingw-vista special r3) ...
Quindi è bene stampare la versione come mi aspetto. Ma su Linux otteniamo questo:
>>> from subprocess import Popen
>>> Popen(['gcc', '--version'], shell=True)
gcc: no input files
Perché gcc non ha ricevuto l'opzione --version
.
I documenti non specificano esattamente cosa dovrebbe accadere agli argomenti in Windows, ma su Unix, "Se args è una sequenza, il primo elemento specifica la stringa di comando e gli eventuali elementi aggiuntivi saranno trattati come argomenti della shell aggiuntivi. " IMHO il modo in cui Windows è migliore, perché consente di trattare le chiamate Popen(arglist)
allo stesso numero di Popen(arglist, shell=True)
.
Perché la differenza tra Windows e Linux qui?
Di solito è una buona idea includere la versione di Python che stai usando o almeno se è la riga 2 o 3. – mloskot