¿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)
- por qué obtenemos 0 en lugar de 7.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()
osubprocess.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.