Je programme un logiciel GUI avec une fenêtre de terminal (wxCtrl) pour afficher la sortie du programme externe en temps réel pendant son exécution.pexpect run commande long bash hang wxpython GUI
J'ai essayé subprocess.Popen, cela ne fonctionne pas comme prévu, car il va bloquer mon interface graphique pendant son exécution, et ne donne que la sortie après l'exécution terminée.
def miExecuteCmd(self, cmd):
self.terminal.addText("\n###\n\n")
self.terminal.addText("Executing: %s\n" % cmd)
args = shlex.split(cmd)
p = subprocess.Popen(args, stdout = subprocess.PIPE)
output = p.stdout.readlines()
output = "".join(output)
self.terminal.addText(output)
if (p.returncode != None and p.returncode != 0):
self.terminal.addText("Command Execution Problem, return code is %d\n" % p.returncode)
return output
Maintenant, je suis en train d'utiliser pexpect, je lis ce post, how to use pexpect to get spontaneous output of subprocess in python
Je codé quelque chose comme,
def miExecuteCmd(self, cmd):
self.terminal.addText("\n###\n\n")
self.terminal.addText("Executing: %s\n" % cmd)
output = []
child = pexpect.spawn(cmd)
while True:
try:
child.expect('\n')
line = child.before
output.append(line)
self.terminal.addText(line)
except pexpect.EOF:
break
if child.exitstatus != None and child.exitstatus != 0:
line = "Command Execution Problem, return code is %d\n" % child.exitstatus
self.terminal.addText(line)
output.append(line)
output = "".join(output)
return output
Mais encore l'interface graphique gèlera pendant que je une longue temps qui passe cmd.
Donc, je demande une solution pexpect simple me permettant d'utiliser mon interface graphique et de voir la sortie du cmd en même temps.
J'ai lu le document pexpect, il semble que pexpect.spawn() devrait démarrer un thread séparé pour la commande, maintenant je suis confus de mettre pexpect.spawn() dans un nouveau thread.
merci pour le code, mais ce n'est pas complet, j'ai besoin de la nouvelle discussion envoyer des informations au fil principal dans les deux sens. Je l'ai trouvé en utilisant PubSub dans wxpython, le mettra à jour bientôt. –
Si vous aviez mentionné plus tôt, j'aurais pu vous montrer cela aussi! – user2963623