Pegar variavel do OS

Eae.
Se alguém puder ajudar ai… Estava a tentar fazer um projetinho de criar um fatch usando python mas ai veio a duvida… preciso pegar informacões pro print tava ai tava com a ideia de colocar num print para poder colocar coisas na frente mas preciso colocar a informação numa variavel… como eu poderia colocar por exemplo o:

os.system(‘uname -o’)

em uma variavel…

Ou outro jeito que eu poderia fazer tal coisa.

2 curtidas

Não sei sobre Python, mas Linux tem uma função C que faz exatamente isso, popen(), dá uma pesquisada aí pra ver se tem uma versão ou bind pra Python.

2 curtidas

É só passar esse comando como valor da variável, assim:

import os

test = os.system("uname -a")
print(test)

aqui retornou isso:

archlinux% python test.py
Linux archlinux 5.2.4-arch1-1-ARCH #1 SMP PREEMPT Sun Jul 28 10:52:46 UTC 2019 x86_64 GNU/Linux
0
3 curtidas

nossa kk. eu tentei fazer algo parecido antes mas não tinha dado certo eu devo ter errado alguma parte kkkkk…
vlw :upside_down_face: .

2 curtidas

Oq ele retornou não foi a string, foi aquele 0, as docs de Python dizem que esse comando simplesmente chama a system() de C, que retorna um int que indica se a função deu certo ou não, tanto que se vc remover aquele print a string é printada do mesmo jeito, pq é só o output da call, não do print.

1 curtida

Eu pensei que ele retornava a string e o inteiro mostrando se a função tinha dado certo, obrigado pela observação, mas então a variável não vai ter esse output da call :confused:

1 curtida

Opa!
Belesma?
Existem inúmeras formas de se fazer.
Acredito que o módulo subrocess pode ser útil neste caso.

Código:

Saída:
image

Arquivo teste.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import subprocess

# GLOSSÁRIO DO VOVÔ =)
#---------------------------------------------------------
# 
#    saida_do_comando-> variavel para armazenar a saída do 'subprocess'
#    subprocess......-> módulo do python3
#    check_output....-> função do módulo 'subprocess'
#    comando.........-> variavel para armazenar o texto do comando
#    stderr..........-> argumento da função 'check_output'.
#                       Captura possíveis erros durante a execução da função
#    shell=True......-> argumento da função 'check_output'. 
#                       Especifica que o comando será executado através do shell

try:                                                       # Tente...
    comando = 'uname -a'                                   # comando recebe a string = 'uname -a'
    saida_do_comando = subprocess.check_output(comando, stderr=subprocess.STDOUT, shell=True) 
    print('Saída do comando Belesma:\n' + saida_do_comando.decode('utf-8'))  # Imprime o texto da saída do comando

    comando = 'osname -detudo'
    saida_do_comando = subprocess.check_output(comando, stderr=subprocess.STDOUT, shell=True)

except Exception as erro:                                  # Em caso de erro, salve na variável 'erro'
    print('Eita... =/')
    print('O comando \'' + comando + '\' retornou erro.')
    print('Retorno-> ' + str(erro.returncode))              # Imprime o código da saída do comando
    print('Saída  -> ' + erro.output.decode('utf-8'))       # Imprime o texto da saída do comando

# .decode('utf-8') é para decodificar a saída do comando que será em bytes.

Referências:

4 curtidas

Então é isso mesmo, com esse módulo subprocess deve ser a melhor alternativa.

1 curtida

nossa vlw…
funcionou no negocio que eu queria …
:smile: .
vou dar uma lida depois no módulo.