python + como imprimir o valor que vem de os.system

0

porque este simples script python não imprime a versão real do redhat?

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

quando eu executo

temos:

7.2
('my version is ', 0)
  1. por que recebemos 0 em vez de 7,2?
  2. como evitar a obtenção da versão - 7.2 do os.system?
por jango 21.01.2018 / 12:29

2 respostas

3

os.system() apenas executa o processo , ele não captura a saída :

If command generates any output, it will be sent to the interpreter standard output stream.

O valor de retorno é o código de saída do processo:

On Unix, the return value is the exit status of the process encoded in the format specified for wait().

Você precisará usar algo como subprocess.check_output() ou subprocess.Popen() diretamente para capturar a saída.

>>> arch = subprocess.check_output("uname -a | awk '{print $9}'", shell=True);
>>> arch
'x86_64\n'
    
por 21.01.2018 / 12:42
0

Você pode usar o módulo subprocess e conseguir isso bastante fácil.

#!/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())

Também para a parte awk , você pode usar sed 's/[^0-9_.-]//g /etc/redhat-release . Isso só extrairá o número da versão e não precisará saber qual é o número da versão do campo, o que o torna mais independente da plataforma.

    
por 21.01.2018 / 13:16

Tags