Unterschied "#!/usr/bin/env python" und "$ python file.py"?

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.
siggi
User
Beiträge: 79
Registriert: Montag 29. Januar 2007, 14:22

@Peter: Danke für's Testen!

@BlackJack:
* 1 * Deine frühere Frage:
Was passiert denn eigentlich wenn Du das vom Terminal aus als Skript startest? Also nicht Python starten und das Skript übergeben, sondern tatsächlich das Skript *selbst* starten. Nicht ``$ python file.py`` sondern ``$ ./file.py``.

Code: Alles auswählen

:~/Desktop/Tom$ ./turtleRunTestPy2.py
bash: ./turtleRunTestPy2.py: Permission denied
Wenn ich dagegen Programme mit z.B. import Tkinter so starte, ist alles ok
Ich frage mich ja weiterhin wie Du bei dem `raw_input()` etwas eingeben willst wenn Du es über einen Mausklick startest.
Ich habe das mal vor Jahren so gelernt, dass ich damit ein Terminalprogramm anhalten kann, ehe es sich schliesst; hat eigentlich bisher immer funktioniert

Wahrscheinlich habe ich einiges durcheinandergebracht auf meinem System, als ich mal wieder "gespielt" habe ohne genau zu wissen was ich tat :oops:
Edit: Ausserdem scheint es noch ziemlich viele Probleme mit Nautilus auf Ubuntu 64bit zu geben:
https://bugs.launchpad.net/ubuntu/+sour ... thon/+bugs
Gruss,

siggi
BlackJack

@siggi: Na wunderbar, das ist die Fehlermeldung die man bekommt wenn die Datei das „executable”-Bit in den Dateirechten nicht gesetzt hat. Was dann auch erklärt warum das nicht per Klick ausführbar ist, weil die Datei grundsätzlich nicht ausführbar ist. Hat also rein gar nichts mit irgendwelchen Importen zu tun. Nun ist meine Welt wieder in Ordnung. :-)
siggi
User
Beiträge: 79
Registriert: Montag 29. Januar 2007, 14:22

Es ist aber gesetzt! Meine Welt ist deshalb nicht in Ordnung!
Gruss,

siggi
BlackJack

@siggi: Für den Benutzer der das ausführen will?

Wie sieht denn die Ausgabe von ``ls -l ~/Desktop/Tom/turtleRunTestPy2.py`` aus?
siggi
User
Beiträge: 79
Registriert: Montag 29. Januar 2007, 14:22

@BlackJack: es ist schon ein bisschen wie Vodoo oder noch besser wie das "Wasser mit Erinnerungsvermögen", das mal vor Jahren durch die Presse ging. Heute abend, vorhin, hat es mal wieder geklappt mit dem Klick.
Hier mal eine Zusammenfassung von heute abend (werde es mal irgendwann wiederholen und sehen, was dann rauskommt. Interessant, dass Ubuntu und Xubuntu z.T. verschieden reagieren:

Ubuntu 12.04 64 bit
python: Python 2.7.3 (default, Sep 26 2013, 20:03:06)

Datei turtleRunTestPy2.py:

Code: Alles auswählen

#!/usr/bin/env python
print "Test"
raw_input("Enter")
*********************
executable: activated
*********************
-rwxrwxr-x turtleRunTestPy2.py
* 1 *
$ -rwxr-xr-x turtleRunTestPy2.py
./turtleRunTestPy2.py
Ausgabe im Terminal:
Test
Enter
---> klappt

* 2 *
$ python turtleRunTestPy2.py
Test
Enter
---> klappt

* 3 *
nach Eingabe von "python" im Terminal:
>>> execfile("turtleRunTestPy2.py")
Test
Enter
---> klappt

* 4 *
Nautilus:
Linker Mausklick klappt
Recht Maus > Open: klappt
Rechte Maus > Kontext: open with Python2 klappt nicht


***********************
executable: deactivated
***********************
-rw-rw-r-- turtleRunTestPy2.py

* 1 *
$ ./turtleRunTestPy2.py
bash: ./turtleRunTestPy2.py: Permission denied
---> klappt nicht

* 2 *
$ python turtleRunTestPy2.py
Test
Enter
---> klappt

* 3 *
nach Eingabe von "python" im Terminal
>>> execfile("turtleRunTestPy2.py")
Test
Enter
---> klappt

* 4 *
Nautilus:
Linker Mausklick klappt nicht
Rechte Maus > Kontext: open with python2 klappt nicht

Xubuntu 12.04 32 bit
python: Python 2.7.3 (default, Sep 26 2013, 20:08:41)

Datei turtleRunTestPy2.py:

Code: Alles auswählen

#!/usr/bin/env python
print "Test"
raw_input("Enter")
*********************
executable: activated
*********************
-rwxrwxr-x turtleRunTestPy2.py
* 1 *
$ ./turtleRunTestPy2.py
Test
Enter
---> klappt

* 2 *
$ python turtleRunTestPy2.py
Test
Enter
---> klappt

* 3 *
nach Eingabe von "python" im Terminal:
>>> execfile("turtleRunTestPy2.py")
Test
Enter
---> klappt

* 4 *
Thunar:
Linker Mausklick klappt klappt nicht
Rechte Maus > Kontext: open with Python(2.7) klappt


***********************
executable: deactivated
***********************
-rw-rw-r-- turtleRunTestPy2.py

* 1 *
$ ./turtleRunTestPy2.py
bash: ./turtleRunTestPy2.py: Permission denied
---> klappt nicht

* 2 *
$ python turtleRunTestPy2.py
Test
Enter
---> klappt

* 3 *
nach Eingabe von "python" im Terminal
>>> execfile("turtleRunTestPy2.py")
Test
Enter
---> klappt

* 4 *
Thunar:
Linker Mausklick klappt
Rechte Maus > Kontext: open with Python(2.7) klappt

Ich habe jetzt erst mal genug geforscht. Ein frohes Weihnachtsfest dir und allen, die noch vorbeischauen!
Gruss,

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

Executable-Bit ist nur relevant für den "direkten" Aufruf also ``./turtleRunTestPy2.py``. Dass das mit ``python turtleRunTestPy2.py`` sowie über execfile immer funktionieren wird ist klar, da diese dieses Bit nie auswerten weil das Programm was gestartet wird nicht ``turtleRunTestPy2.py`` ist, sondern ``python``. Und dieses hat das Executable-Bit gesetzt, natürlich.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Für den Mausklick im Dateimanager kann das Bit auch von Bedeutung sein. Kommt aber wie gesagt darauf an was der konkrete Dateimanager ganz konkret tut wenn man auf ein Icon klickt.
Antworten