Al utilizar subprocess.Popen(args, shell=True)
para funcionar "gcc --version
" (solo como ejemplo), en Windows obtenemos esto:¿Por qué subprocess.Popen() with shell = True funciona de manera diferente en Linux vs Windows?
>>> from subprocess import Popen
>>> Popen(['gcc', '--version'], shell=True)
gcc (GCC) 3.4.5 (mingw-vista special r3) ...
Así que está muy bien imprimiendo la versión como espero. Pero en Linux obtenemos esto:
>>> from subprocess import Popen
>>> Popen(['gcc', '--version'], shell=True)
gcc: no input files
Debido gcc no ha recibido la opción --version
.
Los documentos no especifican exactamente lo que debería sucederle a los argumentos bajo Windows, pero sí dice, en Unix, "Si args es una secuencia, el primer elemento especifica la cadena de comandos, y cualquier elemento adicional será tratado como argumentos de shell adicionales ". En mi humilde opinión, la forma de Windows es mejor, ya que le permite tratar las llamadas Popen(arglist)
de la misma manera que Popen(arglist, shell=True)
.
¿Por qué la diferencia entre Windows y Linux aquí?
Por lo general, es una buena idea incluir la versión de Python que está utilizando o al menos si es la línea 2 o 3. – mloskot