"Saubere" Enter-on-quit Lösung

Code-Stücke können hier veröffentlicht werden.
Antworten
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hallo,

Ich muss zugeben, dass ich kein großer Fan diverser Methoden zum Offenhalten des Fensters der Eingabeaufforderung unter Windows bin. Ich denke immer noch, dass dies in aller Regel undurchdacht ist, weil dann Leute die das Programm aus der Shell starten unnötigerweise Enter drücken müssen.
Jedoch gibt es auch manchmal, ganz selten Fälle bei denen das sinnvoll ist. Um diese Fälle geht es mir in diesem Snippet.

In der Regel wird einfach ``raw_input()`` genommen, was nicht optimal ist, da das Programm bei unbehandelten Exceptions gar nicht erst zu diesem Code kommt und daher schon vorher beendet wird - dadurch geht das Fenster zu und man kann den Traceback nicht sehen.

Mein Ansatz baut auf ``atexit`` auf, dass den Exit-Handler herimmt und somit auch bei Exceptions aktiv ist.

Der Code ist in Paste #2967 zu finden.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Hallo,

Auch wenn's nach Haarspalterei aussehen sollte:
Die Bezeichnung "the MIT License" sollte man so nicht verwenden:
Seiten der FSF zu Lizenzen hat geschrieben: Expat License

This is a simple, permissive non-copyleft free software license, compatible with the GNU GPL. It is sometimes ambiguously referred to as the MIT License.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Das ist ja witzig, genau so eine Lösung hab ich mir vor kurzem auch überlegt. Und zwar hatte ich den Fall das ein Pythonskript das als Windowsservice laufen sollte sich immer wieder verabschieded hatte und ich nicht sehen konnte was da passiert ist ;)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

mkallas hat geschrieben:Auch wenn's nach Haarspalterei aussehen sollte:
Die Bezeichnung "the MIT License" sollte man so nicht verwenden
Richtig. Original stand im Quellcode auch "MIT/X license", habs dann aber für overkill gehalten, da das fast schon länger gewesen wäre als der Quellcode ;) In der Regel spricht man in dem Fall eben von MIT-Lizenz.

Ich habe auch überlegt: heißt es nun new BSD license oder revised BSD license?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
pudeldestodes
User
Beiträge: 65
Registriert: Samstag 9. Juni 2007, 23:45

Zur Ergänzung: eine einfache Mögilchkeit ist es, eine .bat-Datei der folgenden Form zu erstellen:

Code: Alles auswählen

python programm.py
@pause
Befindet sich Python nicht in der Path-Umgebungsvariable, so lässt sich auch der absolute Pfad zur .exe angeben.
Zuletzt geändert von pudeldestodes am Donnerstag 17. September 2009, 12:39, insgesamt 1-mal geändert.
pudeldestodes
User
Beiträge: 65
Registriert: Samstag 9. Juni 2007, 23:45

Da es mich mittlerweile nervt, für jedes Python-(Perl-, etc.)-Programm noch eine extra .bat-anzulegen, habe ich mir über die Windowsdateiverknüpfung für das "Rechts-Klick-Menü" eine neue Aktion definiert, die auf eine .bat mit dem folgenden Inhalt verweist:

Code: Alles auswählen

C:\Python25\python.exe %*
@pause
Weitere Option: Mit "|| @pause" (führe aus, wenn vorheriger Befehl fehgeschlagen ist) würde das Fenster nur bei einer Fehlermeldung auf Eingabe warten (wie ich finde die sinnvollste Lösung).

Eingestellt wird das ganze dann unter:
Arbeitsplatz->Extras->Ordneroptionen->Dateitypen->py->Erweitert->neu->
Vorgang: irgendein fescher Name
Anwendung: obige .bat-Datei auswählen.

Bisher funktioniert das einwandfrei.

Edit: Befehl ausgebessert.
Zuletzt geändert von pudeldestodes am Freitag 15. Januar 2010, 01:16, insgesamt 2-mal geändert.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

mkallas hat geschrieben:Auch wenn's nach Haarspalterei aussehen sollte: [...]
Also ohne Leonidas Leistung jetzt schmälern zu wollen, doch auch wenn er ein Copyright auf den Kommentartext hat, habe ich so meine Zweifel, dass die Erfindungshöhe von "atexit.register(raw_input, '...')" hoch genug ist, als das man sich da überhaupt über eine Lizenz streiten müsste ;)

Stefan
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

sma hat geschrieben:Also ohne Leonidas Leistung jetzt schmälern zu wollen, doch auch wenn er ein Copyright auf den Kommentartext hat, habe ich so meine Zweifel, dass die Erfindungshöhe von "atexit.register(raw_input, '...')" hoch genug ist, als das man sich da überhaupt über eine Lizenz streiten müsste ;)
Naja, da es die MIT-Lizenz ist, kann ich dich ja jetzt auch schlecht verklagen, wenn du den Code dreist abkupferst ;)
Aber ich möchte hinweisen dass der Code inzwischen über 2 Jahre alt ist und ich für mich beanspuche in der Zeit etwas, wenn auch nicht viel, Charakterentwicklung durchlaufen zu haben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten