Probleme beim Ausführen des Scripts (mit externem Programm)

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
Suafidudi
User
Beiträge: 1
Registriert: Mittwoch 22. September 2021, 16:27

Hallo,
Ich habe vor ein paar Tagen mit Python angefangen und es macht mega Spaß. Ich arbeite mit Pycharm und habe gerade die input-Funktion mir angeschaut.
Dann hab ich gleich mal damit rumgespielt und schrieb das :

name = input("Enter your name:")
age = input("Enter your age:")
city = input("Enter your city:")

print("Hello " + name + "! \nNice to meet you," + name + "," + age+ ",from " + city + "! :)")

In Pycharm funktioniert auch alles super, aber sobald ich das Script extern ausführe habe ich das Problem, dass nur die ersten drei Zeilen Code ausgeführt werden und sich danach das Fenster schließt.

Weis jemand wie ich es hinbekomme auch noch die letzte Zeile angezeigt zu bekommen.

Vielen Dank im vorraus
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Suafidudi: Konsolenprogramme startet man in einer bereits offenen Konsole. Dann bleibt die auch nach Programmende offen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

Oder man lässt das Skript nicht einfach durchlaufen und sich danach beenden.

Z.B.:

Code: Alles auswählen

from signal import pause

name = input("Enter your name:")
...

pause()
Alles was wir sind ist Sand im Wind Hoschi.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@hyle: das ist keine gute Idee. Konsolenprogramme werden in einer Konsole gestartet. Deine Methode versagt beim ersten Fehler.
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

@Sirius3 Kannst Du mir bitte erklären warum das keine gute Idee ist? Weil es sich hier um eine User-Interaktion handelt?
Versteh mich bitte nicht falsch, ich möchte nur gern wissen was ich übersehen habe. :wink:

Fall 1: Die Konsole ist offen und man startet das Skript darin. Es tritt ein Fehler auf. Die Fehlermeldung wird in der Konsole angezeigt.

Fall 2: Die Konsole öffnet sich um das Skript zu starten. Es tritt ein Fehler auf. Die Konsole schließt sich.

Ist es nur keine gute Idee, weil man die Fehlermeldung nun nicht sieht, bzw. weil der Programmierer sich nicht um einen vernünftige Fehlerbehandlung gekümmert hat? Wenn das ein Argument dagegen ist, dann dürfte man IMHO kein Skript automagisch z.B. per Cronjob oder Systemd Service Unit starten lassen, weil es dort auch keine (direkte) Fehlerausgabe gibt.

Oder an welcher Stelle ist da der Knoten in meinem Kopf? :?
Alles was wir sind ist Sand im Wind Hoschi.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast doch die Argumente selbst gebracht. Bei cronjob und systemd hast Du ja andere Möglichkeiten den Fehler zu sehen, mit Deinem Doppelgeclicke hast Du dagegen keine Möglichkeit. DAs ist der Unterschied.
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

Doppelgeklicke? Davon schrieb ich nichts. Davon abgesehen kann man Fehlermeldungen auch in Dateien umleiten oder eine Systemd Service Unit einrichten, die mit einer *.desktop-Datei gestartet werden könnte, um den von Dir genannten Doppelklick mit einzubeziehen.
Alles was wir sind ist Sand im Wind Hoschi.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Aber das pause ist doch für den doppelklick. Wenn wäre das mit einem catchall + fehlerausgabe sinnvoll, damit man bei einem Fehler nicht wie der Ochs vorm Berg steht. Oder man nutzt eben gleich die Konsole, und vermeidet so auch das ja eher nervige abbrechen müssen.
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

Eine Konsole wird eh verwendet / geöffnet, so oder so. Das mit dem Signal war auch eigentlich nur ein Beispiel (steht ja auch da im Beitrag #3 :wink: ) und hätte genau so gut eine Schleife oder noch ein input sein können, um das Skript nicht einfach ohne "der letzten Ausgabe" durchlaufen zu lassen. Siehe dazu Beitrag #1!

Und wie ich auch schon schrieb ist m.M.n. eine fehlende Fehlerbehandlung kein Argument dagegen. Ich will mich hier aber auch nicht streiten.
Alles was wir sind ist Sand im Wind Hoschi.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@hyle: Natürlich ist das ein Argument dagegen, und zweite ist, das jeder Benutzer Dich hassen wird der das richtig verwendet, weil *keine verdammte andere Konsolensoftware so einen Scheiss macht!!!!1!!elf!*.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

Mit anderen Worten, das macht man einfach nicht, denn das ist unüblich und böse?!

Ok, mit dieser Aussage gebe ich mich zufrieden. :D
Alles was wir sind ist Sand im Wind Hoschi.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na das gilt ja nun fuer die meisten Sachen. Globale Variablen, getter/setter, unsichere Thread-Kommunikation, falsche Socket-Programmierung, Python 3 statt 2, etc. pp. Sind alles nur "kann", niemals muss.
Antworten