comando bash em python não funciona

0

Eu gostaria de executar um comando bash do python. Meu código:

process = subprocess.Popen(('ifconfig -s'), stdout=subprocess.PIPE, shell=True)
output = process.communicate()[0]
lcd.message(output)
sleep(2)
lcd.clear()

Isso executa "ifconfig -s" e a saída é exibida em um LCD de 16x2. Demasiada informação para esse monitor. Então o novo comando é:

ifconfig | awk '$1 {print $1}' FS="  " ORS=,

Funciona perfeitamente em um shell, mas tenho problemas no código python. Quando eu simplesmente mudo o "ifconfig -s" com isso eu recebo erros. Acho que isso se deve ao > '< sinais de citação ...

Você poderia me ajudar a fazer o novo ifconfig funcionar com o código antigo?

    
por kelmat 04.02.2015 / 14:01

1 resposta

0

process = subprocess.Popen( 
                            r"ifconfig | awk '$1 {print $1}' FS=' ' ORS=,", 
                            stdout=subprocess.PIPE,
                            shell=True
                           )
output = process.communicate()[0]
lcd.message(output)
sleep(2)
lcd.clear()

Se 'shell = True' e uma sequência forem passadas, o comando e seus argumentos devem ser listados como itens individuais da sequência como ('ifconfig', '- s').
Se uma string é passada como acima, o ipc é facilmente alcançado porque toda a string é passada para shell quando o shell é verdadeiro.
Para passar a sequência e fazer 'ipc',

process1 = subprocess.Popen( 
                           [ 'ifconfig'],
                           stdout=subprocess.PIPE
                           )
process2 = subprocess.Popen( 
                           [ 'awk','$1 {print $1}', 'FS=" "', 'ORS=,'],
                           stdout=subprocess.PIPE,
                           stdin=process1.stdout
                           )
output = process2.communicate()[0]
lcd.message(output)
sleep(2)
lcd.clear()
    
por 04.02.2015 / 16:22