Bonsoir,
je voudrais lancer des commandes python et autre (os.system, subprocess...) sans bloquer l'interface graphique.
Je m'explique, une fois le travail en cours, impossible de cliquer ou que ce soit.
En bash je lançais ces commandes en fond via &.
Comment peut-on faire en python ?
Dans le cas présent, l'avancement va bien fonctionner mais impossible de cliquer tant que ce n'est pas fini car cela occupe le script.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 cmd = ["mkvextract", "tracks", "/home/hizoka/Fichier.mkv", '0:"/home/hizoka/0_Video.mkv"', '1:"/home/hizoka/1_Audio_dts_eng.dts"'] try: reply = subprocess.Popen(cmd, universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) except (IOError, OSError) as exc: self.print_(u"\nSubprocess ERROR: {0}".format(exc)) return old_text = "" while 1: text = reply.stdout.readline()[:-1] if type(text) != str or text == '' and reply.poll() != None: # Terminé ! break elif old_text == text: pass else: old_text = text if "Progression" in text: chains = text.split(":") try: value = int(chains[1].strip().replace('%', '')) except: pass else: self.ui.progressBar.setValue(value)
Il faudrait pouvoir lancer cette boucle infinie en fond...
Autre exemple :
Il ne se passe rien dans le cas présent, pas de progression dans la progressbar...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 def MKValidator(self): self.ui.progressBar.setMaximum(0) # Permet de faire progresser automatiquement la progressbar os.system('mkclean "{}"'.format(Configs["MKVLink"])) self.ui.progressBar.setMaximum(100) # Arrête la progression auto
j'ai testé également avec subprocess.Popen, subprocess.check_out.
La, le soucis est le meme, si je surveille la commande pour savoir quand arreter la progression automatique, je bloque mon logiciel.
Une idée de comment surveiller ces commandes pour envoyer la progression ou non sans bloquer la gui (qui permettrait le clic sur un bouton pour stopper le travail) ?
Voilou
Merci.
Partager