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)
- por que começamos 0 em vez de 7.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()
ousubprocess.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.