Seite 1 von 1
Starten eines python-Programmes/ Tastenbelegung
Verfasst: Sonntag 17. Februar 2019, 11:52
von juergewa
Ich bin absoluter Programmierneuling und fange mit ganz einfachen Programmen an. Ich kann ein geschriebenes Programm zwar speichern und auch wieder aufrufen, aber ich habe ein Problem damit, das Programm zum Laufen zu bekommen. Das programm lautet: print('Bitte einen Text eingeben')
x = input()
print('Ihre Eingabe::' x)
Die Eingabeaufforderung kommt, aber wenn ich einen Text eingebe und dann auf enter drücke verschwindet das Fenster ( unter windows 1o). Habe ich einen Fehler im Programm ? Welche Taste muss ich nach der Eingabe drücken, damit das Programm weitergeht?
Jürgen
Re: Starten eines python-Programmes/ Tastenbelegung
Verfasst: Sonntag 17. Februar 2019, 12:04
von __deets__
Dein Problem besteht im Verhalten von Windows: das per Doppelklick gestartete Programm tut seinen Dienst klaglos. Aber nach der letzten Anweisung ist es vorbei. Und was mach Windows dann? Es schließt das Fenster.
Da es sowieso gut ist, sich mit der kommandozeile vertraut zu machen, würde ich so vorgehen:
- starte CMD.EXE aus dem schnellstarter von Windows.
- navigiere mit cd zu der Stelle, an der dein Programm liegt.
- ruf es da auf.
Re: Starten eines python-Programmes/ Tastenbelegung
Verfasst: Sonntag 17. Februar 2019, 12:30
von Perlchamp
@ juergewa :
1. bitte deinen code hier im forum zwischen die dafür vorgesehenen code-Tags schreiben. Dazu oberhalb des Editors auf den Button "</>" klicken.
2. schreibe deine Skripte immer so, dass ein dritter auch weiß, was du tust. Dafür sind Bezeichner wie 'x' eher unangebracht.
3. dein code ist auch nicht richtig.
wenn du jedesmal ans Ende eines Skriptes folgendes hängst :
Code: Alles auswählen
if(__name__ == "__main__"):
print()
print("Programm schliessen mit <Enter>")
dann bleibt das Fenster auch offen.
Ich habe mir beispielsweise eine Vorlagendatei "vorlage_script_neu.py" erstellt, die ich immer aufrufe und dann unter dem entsprechenden Namen speichere mittels STRG + Shift + s
die sieht so aus:
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Autor:
# Datum:
# Dateiname :
# Sinn/Zweck :
#TO DO
"""
text
"""
#IMPORT
#from [modul] import */[Funktion]
#import [modul]
#FUNKTIONDEFINITIONEN
#class [name](object) :
#def [name](Parameter/Argumente) :
#KONFIGURATION
#ANWEISUNGEN
#ENDE
if(__name__ == "__main__"):
print()
print("Programm schliessen mit <Enter>")
Re: Starten eines python-Programmes/ Tastenbelegung
Verfasst: Sonntag 17. Februar 2019, 12:40
von nezzcarth
Perlchamp hat geschrieben: Sonntag 17. Februar 2019, 12:30
Ich habe mir beispielsweise eine Vorlagendatei "vorlage_script_neu.py" erstellt, die ich immer aufrufe und dann unter dem entsprechenden Namen
An sich ist dein Template recht gelungen. Allerdings ist es üblich, eine main-Funktion zu haben, die in dem 'if __name__ == '__main__' Block aufgerufen wird, statt den Code dort zu platzieren und oft als unterste Funktion direkt darüber steht. In Python braucht man (anders als in Perl) keine Klammern um die Bedingung. Die Import-Reihenfolge handhabe ich immer so, dass erst Standardbibliotheken kommen, dann 3rd Party Bibliotheken und dann eigene, sowie pro Block Importe ganzer Module vor "from" Importen (siehe:
https://www.python.org/dev/peps/pep-0008/#imports); bei deinem Beispiel ist es anders rum.
Re: Starten eines python-Programmes/ Tastenbelegung
Verfasst: Sonntag 17. Februar 2019, 13:02
von Perlchamp
@nezzcarth :
danke für deine Hilfestellung und deine Tipps !
Habe es jetzt derart geändert :
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Autor:
# Datum:
# Datei:
# Zweck/Sinn:
#TO DO
"""
text
"""
#IMPORT
#import [modul]
#from [modul] import [Funktion]/*
#FUNKTIONDEFINITIONEN
#class [name](object) :
#def [name](Parameter/Argumente) :
#KONFIGURATION
#HAUPTPROGRAMM
if __name__ == "__main__" :
main()
#ENDE
if __name__ == "__main__" :
print()
print("Programm schliessen mit <Enter>")
Re: Starten eines python-Programmes/ Tastenbelegung
Verfasst: Sonntag 17. Februar 2019, 13:11
von __deets__
Perlchamp hat geschrieben: Sonntag 17. Februar 2019, 12:30
wenn du jedesmal ans Ende eines Skriptes folgendes hängst :
Code: Alles auswählen
if(__name__ == "__main__"):
print()
print("Programm schliessen mit <Enter>")
dann bleibt das Fenster auch offen.
Dem ist nicht so. Mal abgesehen von den unueblichen Klammern um die Bedingung macht dieses Snippet nichts anders als der TE. Der __main__-Guard verhindert nur, dass dieser Code beim *importieren* ausgefuehrt wird.
Was du wohl meinst ist sowas hier:
Code: Alles auswählen
if __name__ == "__main__":
print("Programm schliessen mit <Enter>")
input()
Das ist natuerlich moeglich, aber hat einen entscheidenden Nachteil: genau dann wenn es NICHT funktioniert, naemlich wenn man einen Fehler gemacht hat, stuerzt das Programm ab & schliesst sofort die Fehlermeldung. Das Problem hat man nicht, wenn man im Terminal arbeitet. Natuerlich kann man auch die Exception abfangen & ausgeben, aber man kann sich auch einfach an das Terminal gewoehnen..
Re: Starten eines python-Programmes/ Tastenbelegung
Verfasst: Sonntag 17. Februar 2019, 13:26
von Perlchamp
@ _deets_ :
super !, danke !
edit: Klammern waren bereits entfernt, habe Skript-Vorlage deinen Tipps entsprechende geändert.
ich arbeite ungern am Terminal, wegen des fehlenden Syntaxhighlightings. Ich arbeite entweder mit der IDLE oder mit Spider.
Als Anfänger ist mir Syntaxhighlighting sehr sehr wichtig und hat mir bereits oft geholfen !
... und ich kann dann auch mit try...except-, oder try...finally-Anweisungen besser umgehen (da häufiger Umgang damit)

und die Fehlermeldungen (z.B. mittels pickle-Modul) in ein log-file schieben ...
Re: Starten eines python-Programmes/ Tastenbelegung
Verfasst: Sonntag 17. Februar 2019, 13:28
von __deets__
Aber was hat denn das Syntax-Highlighting damit zu tun? Ich rede ja vom ausfuehren deines Programms. Nicht davon, wie du das erstellst. Ob der TE (oder du) da IDLE oder Emacs oder was auch immer benutzen hat damit doch gar nichts zu tun.
Logfiles sollten Text enthalten. Was ist der Gewinn, den mit pickle zu garnieren?
Re: Starten eines python-Programmes/ Tastenbelegung
Verfasst: Sonntag 17. Februar 2019, 13:32
von Perlchamp
@ TE:
so hier erneut die Vorlage:
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Autor:
# Datum:
# Datei:
# Zweck/Sinn:
#TO DO
"""
text
"""
#IMPORT
#import [modul]
#from [modul] import [Funktion1, Funktion2]/*
#FUNKTIONSDEFINITIONEN
#class [name](object) :
#def [name](Parameter/Argumente) :
#KONFIGURATION
#HAUPTPROGRAMM
if __name__ == "__main__" :
main()
#ENDE
if __name__ == "__main__" :
print()
print("Programm schliessen mit <Enter>")
input()
Re: Starten eines python-Programmes/ Tastenbelegung
Verfasst: Sonntag 17. Februar 2019, 13:38
von Perlchamp
@ _deets_ :
du merkst an meiner Antwort, dass ich das Terminal nicht kenne. Aber werde dennoch einmal den Umgang damit versuchen.
Ich speichere üblicherweise alles mit pickle ab, als .dmp-Datei. Ich hoffe, ich schreibe jetzt keinen Mist:
mit pickle gespeicherte Dateien sind konsistenter und weniger fehleranfällig.
Re: Starten eines python-Programmes/ Tastenbelegung
Verfasst: Sonntag 17. Februar 2019, 13:49
von nezzcarth
Perlchamp hat geschrieben: Sonntag 17. Februar 2019, 13:38
Ich speichere üblicherweise alles mit pickle ab, als .dmp-Datei. Ich hoffe, ich schreibe jetzt keinen Mist:
mit pickle gespeicherte Dateien sind konsistenter und weniger fehleranfällig.
Ich glaube, jetzt kommen wir sehr vom ursprünglichen Thema ab, aber ich sehe das etwas anders. Die Frage ist sicher, was man vorhat. Dumps und Log Dateien sind ja zwei verschiedene Dinge. Logs erfüllen eine Berichtsfunktion, Dumps dienen dazu, Daten aus einem Prozess möglichst unverfälscht abzubilden, zu Diagnose- (z.B. Core Dump) und/oder Rekonstruktionszwecken (z.B. Datenbankdump). Pickle eignet sich für den zweiten Zweck (pickle ist allerdings auch umstritten, da es eine Reihe von Problemen z.B. im Bereich Portablität und Sicherheit hat, die es auch als Datenaustauschformat ungeeignet machen); also z.B. um eine Datenstruktur serialisiert wegzuschreiben und sie später wieder zu laden. Aber schon dafür, würden viele argumentieren, eignet sich ein neutraleres, (nicht-binäres), nicht-python-spezifisches Format wie json besser. Für Log Dateien ist es zumindest unter Unix-Systemen üblich, mit Plaintext zu arbeiten, alleine schon, da die Verarbeitung und Manipulation von Text eine der großen Stärken von Unix ist; durch eine Pickle-Datei lässt sich schlecht greppen

Das ist ja u.a. einer der größeren Kritikpunkte an systemd.
Re: Starten eines python-Programmes/ Tastenbelegung
Verfasst: Sonntag 17. Februar 2019, 14:15
von Sirius3
@Perlchamp: Terminal-Programme sind dazu da, aus einem Terminal heraus gestartet zu werden. Du verwechselst das wahrscheinlich mit dem interaktiven Python-REPL, wo es mit ipython auch eine deutlich komfortablere Variante gibt. Wenn man wirklich will, dass Programme nach einem Doppelklick laufen und nicht sofort das Fenster zugeht, sollte man sich ein Batch-Skript schreiben, das Python aufruft und zum Schluß mit PAUSE wartet. Das hat den Vorteil, dass man sich nicht alle Python-Programme für das normale benutzen kaputt macht und auch bei Fehlern das Fenster offen bleibt.
Warum hast Du zwei if-Blöcke mit der exakt selben Bedingung hintereinander?
Re: Starten eines python-Programmes/ Tastenbelegung
Verfasst: Sonntag 17. Februar 2019, 15:27
von Perlchamp
@ nezzcarth :
ja, verstehe ich schon ... eigentlich schiesse ich mit Kanonen auf Spatzen, schon klar.
.json sagt mir jetzt leider gar nichts.
und vielen lieben Dank für deine gute Ausführung/Erklärung

vielleicht kann ja ein Mod die Texte in ein neues Thema verschieben ?
@sirius3 :
Ja, hatte ich in der Tat verwechselt, ich Thor.
Ist ja 'nur' ein Template, aber um richtig zu antworten:
da es unter zwei verschiedenen 'Blöcken' steht (Hauptprogramm, Ende).
Und das mit der Batch-Datei klingt schon mal sehr gut, danke !
Sollte auch einfach zu erstellen sein, oder ?
Re: Starten eines python-Programmes/ Tastenbelegung
Verfasst: Sonntag 17. Februar 2019, 17:02
von ThomasL
Perlchamp hat geschrieben: Sonntag 17. Februar 2019, 15:27
Ja, hatte ich in der Tat verwechselt, ich Thor.
Da du dich auch in einem anderen Thread als Marvel Figur betitelst, schau mal hier:
https://de.wikipedia.org/wiki/Torheit
Aber imho finde ich das auch dieser Titel nicht passend ist, etwas zu negativ.
Re: Starten eines python-Programmes/ Tastenbelegung
Verfasst: Sonntag 17. Februar 2019, 17:10
von Perlchamp
@ ThomasL :
war sarkastisch gemeint (Tor mit 'h'), um meine 'Unfähigkeit' zu unterstreichen, und vor allem, dass ich als Anfänger keine Ratschläge geben sollte, sonst bekommt man schnell den Titel "Dummschwätzer".
Und danke für deine Anmerkung !
Re: Starten eines python-Programmes/ Tastenbelegung
Verfasst: Sonntag 17. Februar 2019, 17:18
von ThomasL
Enthusiasmus ist manchmal ein schlechter Ratgeber, diese Erfahrung habe ich in diesem Forum als Neuling auch gemacht.
Das gibt sich mit der Zeit und wachsendem Wissen.