Pyinstaller Onefile Frage zum _MEIPASS

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
__blackjack__
User
Beiträge: 14377
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@rlinke81: Ich würde sagen aus einem Python-Programm aus (sogar mehrere) weitere Python-Programme mit `Popen` starten zu wollen ist ziemlicher Murks.

Ebenfalls falsch ist, dass es in diesem Programm zwei `Tk`-Objekte gibt. Das darf es nur einmal geben — das ist *das* Hauptfenster. Zusätzliche Fenster macht man mit `Toplevel`.

`ctypes.windll` wird verwendet um Fenster mit Nachrichten zu öffnen — dafür hat `tkinter` doch auch etwas was nicht von Windows abhängig ist. `Popen()` mit ``shell=True`` um einen Prozess zu beenden: das geht auch mit Python. Das ``shell=True`` ist besonders sinnfrei, weil das Kommando ja als Liste übergeben wird.

`os.path` in neuen Programmen? Es gibt `pathlib`. `resource_path()` wird dann auch eher überflüssig.

`strip()` ist vor `int()` unnötig, das macht `int()` selbst schon.

Sofern nicht irgendwo in der Dokumentation garantiert ist, dass man im `_MEIPASS` Verzeichnis schreiben darf, würde ich die Kommunikation der Programme über Textdateien dort als Fehler ansehen. Wirklich schön ist das sowieso nicht. Die "login_status.txt" scheint sinnfrei zu sein. Und die PID-Datei könnte man sich sparen wenn man sich den Prozess als Objekt merken würde und nicht einfach „fire and forget“ praktizieren würde.

Es gibt im Hauptfenster einen „Exit“-Button und einen „Beenden“-Button. Hä‽

`r` ist kein guter Name. Es wird nirgends geprüft ob bei dem Anfragen an den Server eine normale Antwort oder eine HTTP-Fehler-Seite kam.

Fenstergrössen fest vorgeben ist nicht richtig. Das kann funktionieren. Kann aber auch komisch aussehen oder sogar unbenutzbar sein.
Who is General Failure and why is he reading my hard disk?
Benutzeravatar
__blackjack__
User
Beiträge: 14377
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@rlinke81: Wie gesagt, hör einfach auf das zu wollen. Auch wenn das keine einzige EXE ist, macht man das nicht, aus dem eigenen Python-Programm andere eigene Python-Programme starten. Das ist ja letztlich *ein* Programm, also würde man die anderen Module importieren und die Funktionen zum starten einfach aufrufen. Wenn das auch GUI-Programme sind, dann in die gleiche `mainloop()` integrieren, und wenn das etwas ist was im Hintergrund läuft, in einem Thread starten.
Who is General Failure and why is he reading my hard disk?
Antworten