Skripte per Doppelklick ausführen (Linux)

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
Nachbar
User
Beiträge: 24
Registriert: Sonntag 10. Juli 2016, 08:12

Hallo,

ich möchte meine kleinen Übungsprogramme per Doppelklick ausführen lassen, statt im Terminal per "python datei.py". Grundsätzlich habe ich ein Linux System und sowohl python2 als auch python3 installiert. Um die Programme ausführen zu können habe ich
- die Dateien ausführbar gemacht
- per Notepad++ überprüft dass die Zeilenenden LF sind
- Am Anfang des Skriptes die Zeilen
#!/usr/bin/python
und
- # -*- coding: utf-8 -*-
Beim Doppelklicken auf die Datei zuckt es nur kurz, als würde der Terminal ganz kurz auf- und dann sofort wieder zugehen. Deshalb habe ich am Ende noch ein input("") hinzugefügt. Ändert nichts :K .

Frage: woher weiß der Interpreter, ob er python2 oder python3 code zu interpretieren hat? Könnte das Problem daran liegen, dass die Versionen durcheinander kommen oder so? Ich habe es auch mal mit
#!/usr/bin/env python3
probiert, leider ohne Erfolg.

Dank vom Nachbar
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Nachbar: teste Dein Programm vom Terminal aus. Dort müßtest Du die Fehlermeldung sehen können. Python2-Programme bekommen die Shebang-Zeile:

Code: Alles auswählen

#!/usr/bin/env python
und Python3-Programme

Code: Alles auswählen

#!/usr/bin/env python3
Python kann ja nicht von sich aus entscheiden, welche Version Du gerne haben möchtest.
Nachbar
User
Beiträge: 24
Registriert: Sonntag 10. Juli 2016, 08:12

Danke für deine Antwort. Aktuell probiere ich es mit einem python3 Skript und habe gemäß deiner Info diesen Shebang eingefügt:
#!/usr/bin/env python3
Hat leider nichts bewirkt. Im Terminal lässt sich das Skript fehlerfrei ausführen, sofern ich per python3 datei.py aufrufe.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Nachbar: Du solltest das Programm auch so aufrufen, wie das bei einem Doppelklick passiert, nämlich nur mit »./datei.py«.
Nachbar
User
Beiträge: 24
Registriert: Sonntag 10. Juli 2016, 08:12

Ich verstehe nicht was du meinst: das Aufrufen im Terminal ist nicht das Problem. Das Problem ist das Aufrufen per Doppelklick: Letzteres funktioniert nicht, trotz Shebang.
nezzcarth
User
Beiträge: 1635
Registriert: Samstag 16. April 2011, 12:47

Nachbar hat geschrieben:Ich verstehe nicht was du meinst: das Aufrufen im Terminal ist nicht das Problem. Das Problem ist das Aufrufen per Doppelklick: Letzteres funktioniert nicht, trotz Shebang.
Na ja, du verfälschst gewissermaßen den Versuchsaufbau. Wenn du in der Shell die Datei mit python3 <dein_skript.py> aufrufst, wird das Skript direkt an den Interpreter übergeben und die Shebangzeile ignoriert. Wenn du es in der Shell per ./<dein_script.py> aufrufst, wird die Zeile ausgewertet.

Wenn du also prüfen willst, ob dein Skript sich richtig verhält, musst du es so aufrufen, wie es auch beim Doppelklick aufgerufen wird. Und das ist nicht python3 <dein_script.py> sondern eben ./<dein_script.py>

Welchen Windowmanager verwendest du, bzw. in welcher Software (vmtl. irgendein Dateimanager?) führst du den Doppelklick aus?
Nachbar
User
Beiträge: 24
Registriert: Sonntag 10. Juli 2016, 08:12

Ach so ok verstehe. Ansonsten verstehe ich nur noch Bahnhof: Ich habe nun das Skript in python2 geändert (-> print ohne ()). Den Shebang entsprechend angepasst:

Code: Alles auswählen

#!/usr/bin/python2
# -*- coding: utf-8 -*-

apr = 12
mai = 14
jun = 8

durchschnitt = (apr + mai + jun) / 3

print "Niederschlag April:", apr
print "Niederschlag Mai:", mai
print "Niederschlag Juni:", jun
print "Durchschnitt:", durchschnitt

input("")
Dann habe ich das gleiche in eine komplett neue Datei geschrieben, d. h. ich habe nun 2 IDENTISCHE Dateien (in Notepad++ überprüft). Die komplett neue Datei lässt sich wie gewünscht per Doppelklick öffnen. Die alte Datei nicht - obwohl identisch (definitiv!) mit der Neuen. Terminal Output für die alte Datei:
./08.py
./08.py: Zeile 1: #!/usr/bin/python2: Datei oder Verzeichnis nicht gefunden
./08.py: Zeile 4: apr: Kommando nicht gefunden.
./08.py: Zeile 5: mai: Kommando nicht gefunden.
./08.py: Zeile 6: jun: Kommando nicht gefunden.
./08.py: Zeile 8: Syntaxfehler beim unerwarteten Wort `('
./08.py: Zeile 8: `durchschnitt = (apr + mai + jun) / 3'
Wie zur Hölle kann er denn jetzt "/usr/bin/python2" nicht finden?! Bei Ausführung von Datei 08_.py (die neue) hat er offensichtlich keine Probleme damit , python2 zu finden.
Nachbar
User
Beiträge: 24
Registriert: Sonntag 10. Juli 2016, 08:12

Ich hab's :shock: :

Was ich in Notepad++ übersehen hatte, dass die alte Datei in "UTF-8 ohne BOM" kodiert war (was auch immer....). Habe das in UTF-8 geändert und nun lässt sie sich per Doppelklich ausführen. Was mich daran stört, ist dass ich ja eigentlich am Anfang der Datei diese Zeile stehen habe:

Code: Alles auswählen

# -*- coding: utf-8 -*-
Scheint in dem Fall nicht zu greifen oder so :K .

Danke jedenfalls für eure Hilfe :D .
nezzcarth
User
Beiträge: 1635
Registriert: Samstag 16. April 2011, 12:47

Nachbar hat geschrieben: Scheint in dem Fall nicht zu greifen oder so :K .
Die ist nur für Python (https://www.python.org/dev/peps/pep-0263/). Damit der Shebangmechanismus greift, müssen die ersten Bytes #! sein; wenn es ein BOM gibt, ist das natürlich nicht der Fall und es wird versucht, das irgendwie anders auszuführen, in dem Fall als Shellscript.
Nachbar
User
Beiträge: 24
Registriert: Sonntag 10. Juli 2016, 08:12

Ah verstehe. Puuhh gibt noch viel zu lernen...

Vielen Dank!
Nachbar
User
Beiträge: 24
Registriert: Sonntag 10. Juli 2016, 08:12

Leider muss ich nochmal auf die Problematik 'Öffnen per Doppelklick' zurückkommen. Es funktioniert zwar jetzt, sofern die Datei in UT-8 kodiert ist. Allerdings nur wenn der Pfad zur Datei keine Leerzeichen enthält. Wenn die Datei z. B. in einem Ordner namens 'Meine Dateien' liegt, kommt eine Fehlermeldung beim Doppelklicken, von wegen "Datei nicht gefunden". Gibt es dafür eine Lösung (außer den Ordner umzubenennen)?
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Nachbar: Nochmal die Fragen von nezzcarth: Welchen Windowmanager verwendest du, bzw. in welcher Software (vmtl. irgendein Dateimanager?) führst du den Doppelklick aus?
Nachbar
User
Beiträge: 24
Registriert: Sonntag 10. Juli 2016, 08:12

Das ist xfce mit Dateimanager Thunar.
megamichi
User
Beiträge: 8
Registriert: Samstag 3. September 2022, 07:30

Nachbar hat geschrieben: Sonntag 10. Juli 2016, 15:08 Leider muss ich nochmal auf die Problematik 'Öffnen per Doppelklick' zurückkommen. Es funktioniert zwar jetzt, sofern die Datei in UT-8 kodiert ist. Allerdings nur wenn der Pfad zur Datei keine Leerzeichen enthält. Wenn die Datei z. B. in einem Ordner namens 'Meine Dateien' liegt, kommt eine Fehlermeldung beim Doppelklicken, von wegen "Datei nicht gefunden". Gibt es dafür eine Lösung (außer den Ordner umzubenennen)?
das problem hab ich auch wie umgehe ich das
nezzcarth
User
Beiträge: 1635
Registriert: Samstag 16. April 2011, 12:47

megamichi hat geschrieben: Samstag 10. September 2022, 10:39 das problem hab ich auch wie umgehe ich das
Das heißt, du benutzt auch Thunar, ja? Ich kann das beschriebene Verhalten bzgl. Leerzeichen in Verzeichnisnamen nicht nachvollziehen. Wenn Thunar so konfiguriert ist, dass es Skripte per Doppelklick startet und nicht in einem Editor öffnet, klappt das prinzipiell auch bei mir. Im Detail kann es schon mal am Skript selbst liegen. Dafür müssten wir aber das Skript sehen. Falls dein Setup ein anderes ist, kann es sich ggf. auch lohnen einen, eigenen Thread zu öffnen, statt diesen, der schon etwas älter ist, fortzuführen.
Antworten