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

por que esse script python simples 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 o executo

obtivemos:

7.2 ("my version is ", 0) 
  1. por que começamos 0 em vez de 7.2?
  2. como evitar obter a versão – 7.2 do os.system?

Comentários

  • Python2 ou Python3?
  • Isso deve ser movido para o SO?

Resposta

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

Se o comando gerar alguma saída, ela será enviada para o fluxo de saída padrão do intérprete.

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

No Unix, o valor de retorno é o status de saída do processo codificado no formato especificado para 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" 

Comentários

  • ok, mas como capturar apenas o x86_64 sem " \ n "?
  • @janga para o exemplo acima , use arch [: – 1]?
  • ok, funciona, outra última pergunta, como evitar a impressão de os.system, por exemplo os.system (' sed -is " /7.0/$new_version/g" / tmp / file), imprime a string que queremos substituir
  • Para remover a nova linha, use .rstrip()
  • você pode me mostrar toda a sintaxe?

Resposta

Você pode usar o módulo subprocess e conseguir isso com bastante facilidade.

#!/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 awk parte, você pode usar sed "s/[^0-9_.-]//g /etc/redhat-release. Isso só extrairá o número da versão e não precisa saber qual é o número da versão do campo, o que o torna mais independente da plataforma.

Comentários

  • é esta variável – versão – está sem " \ n ", porque eu quero usar essa variável posteriormente no comando sed dentro do python
  • Eu não ' não entendi sua pergunta. O que quer que você esteja fazendo, ' não parece fazer sentido.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *