Quiero asignar la salida de un comando que ejecuto os.system
a una variable y evitar que se envíe a la pantalla. Pero, en el siguiente código, la salida se envía a la pantalla y el valor impreso var
es 0, lo que supongo que significa si el comando se ejecutó correctamente o no. ¿Hay alguna forma de asignar la salida del comando a la variable y también evitar que se muestre en la pantalla?
var = os.system("cat /etc/services")
print var #Prints 0
os.system
(nios.popen
, según la respuesta que aceptó): ¡usesubprocess.Popen
, es mucho mejor!subprocess.Popen
- ¡solo agregashell=True
!shell=True
es (generalmente) una muy mala idea! Tienes que estar muy seguro de lo que estás ejecutando :)Respuestas:
De " Equivalente de Bash Backticks en Python ", que pregunté hace mucho tiempo, lo que es posible que desee utilizar es
popen
:De los documentos para Python 3.6 ,
Aquí está el código correspondiente para
subprocess
:fuente
subprocess.check_output
solución de Walter está más cerca de la línea Pythonic que parece que está buscando, siempre y cuando no le importestderr
.os.popen
?shell=True
. Ver docs.python.org/3/library/…shell=True
, sino que también es incorrecto en este caso.shell=True
hace que la concha el proceso hijo en lugar decat
, por lo queout
yerr
son el stdout / stderr de la cáscara de proceso más que delcat
procesoTambién es posible que desee ver el
subprocess
módulo, que se creó para reemplazar toda la familia depopen
llamadas de tipo Python .La ventaja que tiene es que hay una gran flexibilidad con la forma de invocar comandos, donde se conectan las secuencias estándar de entrada / salida / error, etc.
fuente
check_output
se agregó con python 2.7 docs.python.org/2.7/library/…stderr=subprocess.STDOUT
para capturar errores estándar tambiénEl módulo de comandos es una forma razonable de alto nivel para hacer esto:
el estado es 0, la salida es el contenido de / etc / services.
fuente
Para python 3.5+, se recomienda que utilice la función de ejecución desde el módulo de subproceso . Esto devuelve un
CompletedProcess
objeto, desde el cual puede obtener fácilmente la salida, así como el código de retorno. Como solo le interesa el resultado, puede escribir un contenedor de utilidad como este.fuente
Sé que esto ya ha sido respondido, pero quería compartir una forma potencialmente mejor de llamar a Popen mediante el uso de
from x import x
y funciones:fuente
cmd.py
, y luego en mi archivo principal lo escribífrom cmd import cmdline
y lo usé según sea necesario.lo hago con el archivo temporal os.system:
fuente
Python 2.6 y 3 dicen específicamente que evite usar PIPE para stdout y stderr.
La forma correcta es
fuente