python + cómo imprimir el valor que proviene de os.system

¿por qué este simple script de Python no imprime la versión real de redhat?

version = os.system( " cat /etc/redhat-release | awk \"{print $7}\" " ) print ("my version is " ,version) 

cuando lo ejecuto

obtenemos:

7.2 ("my version is ", 0) 
  1. por qué obtenemos 0 en lugar de 7.2?
  2. ¿Cómo evitar obtener la versión 7.2 de os.system?

Comentarios

  • Python2 o Python3?
  • ¿Debería trasladarse a SO?

Responder

os.system() simplemente ejecuta el proceso , no «captura la salida:

Si el comando genera alguna salida, se enviará al flujo de salida estándar del intérprete.

El valor de retorno es el código de salida del proceso:

En Unix, el valor de retorno es el estado de salida del proceso codificado en el formato especificado para wait ().

Deberá utilizar algo como subprocess.check_output() o subprocess.Popen() directamente para capturar la salida.

>>> arch = subprocess.check_output("uname -a | awk "{print $9}"", shell=True); >>> arch "x86_64\n" 

Comentarios

  • ok, pero ¿cómo capturar solo el x86_64 sin " \ n "?
  • @janga para el ejemplo anterior , use arch [: – 1]?
  • ok, funciona, otra última pregunta, cómo evitar imprimir desde os.system, por ejemplo os.system (' sed -is " /7.0/$new_version/g" / tmp / file), imprime la cadena que queremos reemplazar
  • Para quitar la nueva línea, use .rstrip()
  • ¿puede mostrarme, por favor, toda la sintaxis?

Respuesta

Puede usar el módulo subprocess y lograrlo con bastante facilidad.

#!/usr/bin/python3 import subprocess getVersion = subprocess.Popen("awk "{print $7}" /etc/redhat-release", shell=True, stdout=subprocess.PIPE).stdout version = getVersion.read() print("My version is", version.decode()) 

También para awk, puede usar sed "s/[^0-9_.-]//g /etc/redhat-release. Esto solo extraerá el número de versión y no es necesario saber qué campo es el número de versión, lo que lo hace más independiente de la plataforma.

Comentarios

  • es esta variable – versión – no tiene " \ n ", porque quiero usar esta variable más adelante en el comando sed dentro de Python
  • No ' no entiendo tu pregunta. Lo que sea que estés haciendo, no ' parece tener sentido.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *