Quiero asignar la salida de un comando que ejecuto os.systema 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 vares 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=Truees (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_outputsolució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=Truehace que la concha el proceso hijo en lugar decat, por lo queoutyerrson el stdout / stderr de la cáscara de proceso más que delcatprocesoTambién es posible que desee ver el
subprocessmódulo, que se creó para reemplazar toda la familia depopenllamadas 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_outputse agregó con python 2.7 docs.python.org/2.7/library/…stderr=subprocess.STDOUTpara 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
CompletedProcessobjeto, 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 xy funciones:fuente
cmd.py, y luego en mi archivo principal lo escribífrom cmd import cmdliney 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