Seite 1 von 1

Skript schließt sofort nach Doppelklick

Verfasst: Dienstag 6. Mai 2014, 08:39
von T1m
Guten Morgen :)

Ich habe das Problem, dass wenn ich mein Pythonskript per Doppelklick starte, sich nur kurz die Konsole öffnet und sofort wieder schließt. Das Skript lässt sich jedoch einwandfrei mit der IDLE ausführen, daher denke ich das es nicht am Quellcode liegt.

Trotzdem hier noch der Code:

Code: Alles auswählen


import os
from _thread import start_new_thread
from eins_DU import eins
from zwei_DU import zwei
from drei_DU import drei
from vier_DU import vier
from fünf_DU import fünf

def main():
    
    if os.path.isdir('./Du'):
        pass
    else:
        os.mkdir('./Du')
        print("Verzeichnis Du angelegt! \n")

    start_new_thread(eins,(0,))
    start_new_thread(zwei,(0,))
    start_new_thread(drei,(0,))
    start_new_thread(vier,(0,))
    start_new_thread(fünf,(0,))
    
if __name__ == "__main__":
    main()


Ich würde mich sehr drüber freuen, wenn mir jemand weiterhelfen könnte. :D

Grüße, T1m :D

Re: Skript schließt sofort nach Doppelklick

Verfasst: Dienstag 6. Mai 2014, 09:02
von darktrym
Warum sollte es was anderes tun?

Re: Skript schließt sofort nach Doppelklick

Verfasst: Dienstag 6. Mai 2014, 09:04
von mutetella
Weshalb glaubst Du denn, dass die Konsole geöffnet bleiben sollte? Gibt ja keinen Grund dafür, oder?

mutetella

Re: Skript schließt sofort nach Doppelklick

Verfasst: Dienstag 6. Mai 2014, 09:14
von BlackJack
@T1m: Noch ein paar Anmerkungen: Ein einzelner führender Unterstrich bei einem Namen bedeutet, dass dieses Objekt nicht zur öffentlichen API gehört. Das `_thread`-Modul ist also nicht dazu gedacht von Dir benutzt zu werden. Für Threads gibt es das `threading`-Modul.

Bei den `Thread`-Objekten kann über das Daemon-Flag auch entscheiden ob die am Ende des Hauptprogramms einfach mit beendet werden, oder ob das gesamte Programm solange läuft wie mindestens einer dieser Threads läuft. Wobei es schon sauberer wäre, wenn man im Hauptprogramm dann einfach mit `join()` auf das Ende der Threads warten würde. Zumindest wäre es dann offensichtlicher dass das Programm an der Stelle noch nicht zuende ist.

Die Namensgebung der Module und Funktionen daraus sind hoffentlich nur Beispiele.

Der ``if``-Zweig mit dem ``pass`` ist unnötig. Da würde man einfach die Bedingung mit ``not`` negieren.

Werte wie Pfadnamen sollte man nicht mehrfach im Quelltext wiederholen sondern an eine Konstante binden. Dann muss man den Namen nur an einer Stelle anpassen wenn man ihn mal ändern will oder muss.

Bei einem Start durch Doppelklick stellt sich auch die interessante Frage was in dem Fall das aktuelle Arbeitsverzeichnis ist.

Edit: (ungetestet)

Code: Alles auswählen

import os
from threading import Thread
from eins_DU import eins
from zwei_DU import zwei
from drei_DU import drei
from vier_DU import vier
from fuenf_DU import fuenf

DU_PATH = 'Du'


def main():
    if not os.path.isdir(DU_PATH):
        os.mkdir(DU_PATH)
        print('Verzeichnis {0} angelegt!\n'.format(DU_PATH))

    threads = [
        Thread(target=f, args=(0,)) for f in [eins, zwei, drei, vier, fuenf]
    ]
    for thread in threads:
        thread.start()
    for thread in threads:
        thread.join()


if __name__ == '__main__':
    main()

Re: Skript schließt sofort nach Doppelklick

Verfasst: Dienstag 6. Mai 2014, 10:09
von T1m
Danke BlackJack :) dein Beitrag ist sehr auf­schluss­reich. Jetzt funktioniert alles und ich habe wieder was dazu gelernt. :)

Grüße, T1m :D