7 votes

le sous-processus ne semble pas fonctionner dans le fichier exe de pyinstaller

Mon programme en tkinter fonctionne bien lorsque je l'exécute en utilisant PyCharm , quand je crée .exe en utilisant pyinstaller,
pyinstaller -i"icon.ico" -w -F script.py
Je n'ai pas d'erreur. Je colle script.exe dans le même dossier que mon script.py et après l'avoir exécuté, je pense que dans l'étape où subprocess est, il ne répond pas, parce que j'ai print avant la ligne de sous-processus et son fonctionnement.

Quelqu'un sait pourquoi ?

C'est la ligne avec le sous-processus :

import subprocess
from subprocess import Popen, PIPE
 s = subprocess.Popen([EXE,files,'command'],shell=True, stdout=subprocess.PIPE)

EDITAR:

même problème avec :

s = subprocess.check_output([EXE,files,'command'],shell=True, stderr=subprocess.STDOUT)

9voto

Daan Wiltenburg Points 131

Vous pouvez compiler votre code en mode -w ou --windowed, mais vous devez alors attribuer stdin et stderr également.

Alors, changez :

s = subprocess.Popen([EXE,files,'command'],shell=True, stdout=subprocess.PIPE)

à :

s = subprocess.Popen([EXE,files,'command'],shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

2voto

sygneto Points 831

Le problème a été résolu en n'utilisant pas -w commande pour générer un fichier exe à partir de .py script.

0voto

Leon Wiesen Points 27

Utilisez cette fonction pour obtenir la sortie de la commande à la place. Fonctionne avec les options -F et -w :

import subprocess
def popen(cmd: str) -> str:
    """For pyinstaller -w"""
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    process = subprocess.Popen(cmd,startupinfo=startupinfo, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
    return decode_utf8_fixed(process.stdout.read())

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X