Como faço para capturar a saída de um comando e colocá-lo em um rótulo?

1

Este é um extrato do código de um aplicativo do Quickly em que estou trabalhando:

# Code for other initialization actions should be added here.

self.apachestart = self.builder.get_object("apachestart")
self.label1 = self.builder.get_object("label1")

def on_apachestart_clicked(self, widget):
    subprocess.call(['sudo', 'service', 'apache2', 'start'])   

Agora, quando pressiono o botão para iniciar o Apache (denominado apachestart ), ele imprime como padrão no terminal em que o servidor foi iniciado:

* Starting web server apache2  [ OK ] 

Como faço para que a saída de texto do terminal seja mostrada em um rótulo?

    
por Matei Cezar 04.12.2012 / 19:49

1 resposta

5

Esta não é realmente uma pergunta rápida, mas pura em Python.

Veja a Subprocess documentação, especialmente a check_output método.

Você pode fazer algo assim (não testado):

def on_apachestart_clicked(self, widget):
    result = subprocess.check_output(['sudo', 'service', 'apache2', 'start'])
    if result.split('[ ')[1].startswith('OK'):
        text = "Success!"
    else:
        text = "Failed!"
    self.label1.set_text(text)

Talvez também pegue o CalledProcessError na chamada.

    
por Timo 04.12.2012 / 20:01