Wie führe ich ein Python-Programm direkt aus?

13

Wie führe ich ein Python-Programm direkt aus?

Ich habe eine .py- Datei (zum Beispiel mnik.py ) in gedit erstellt. Es läuft reibungslos im Terminal.

Befehl geht

python3 mnik.py

Aber wenn ich auf die Datei klicke, wird sie mit gedit geöffnet. Ich kann es nicht direkt ausführen, indem ich auf klicke.

Was ist zu tun?

Priyadarshi Paul
quelle
4
@kasperd Die Eingabe python3in der Befehlszeile mit einem Argument ist eine hervorragende Möglichkeit, Python-Skripte auszuführen. Es ist in der Tat der einfachste Weg, ein Programm auszuführen, das ein Terminal und Argumente benötigt (wie viele meiner eigenen Skripte, aber auch Programme wie mercurial, sphinx). Möchtest du erklären, warum das, was ich seit über 20 Jahren mache, nicht der richtige Weg ist?
Anthon
3
@kasperd Ein korrekt geschriebenes Python-Skript (oder -Programm) muss keine Shebang-Zeile enthalten. Wenn nicht, ist es in jeder Hinsicht immer noch ein Python-Skript. Dieses Skript kann von den Linux-Shells in der Kurzform, die Sie zu bevorzugen scheinen, einfach nicht ausgeführt werden. Es gibt auch Umgebungen, in denen Python-Skripte überhaupt keine Shebang-Linie benötigen und das Skript durch Doppelklicken starten können.
Anthon
1
@kasperd Was der Kernel benötigt, damit ein Python-Skript mit ausgeführt werden kann ./scriptname, bestätigt nicht Ihre Behauptung, dass ein Skript über die Befehlszeile mit ausgeführt werden kann python3. Es gibt verschiedene Möglichkeiten von Python - Skripte ausgeführt und dabei python3 ./mnik.pyist auch eine richtige Art und Weise , Dinge zu tun, es ist einfach anders (und zumindest Sie python3 erhalten auf diese Weise und nicht python2 als eher mit den meisten ist die Antworten bisher)
Anthon
1
Die Verwendung von <language> <script> ist eine absolut gültige und akzeptierte Methode zum Ausführen eines Skripts. Das Vorschlagen, dass es sich um eine schlechte Praxis handelt, sollte verpönt werden.
Jacob Vlijm

Antworten:

26

Es gibt zwei Dinge, die benötigt werden.

  1. Ein Skript muss eine #!Zeile enthalten, die dem Betriebssystem mitteilt, welcher Interpreter verwendet werden soll. In Ihrem Fall Ihre ganz zuerst muss Zeile im Code sein#!/usr/bin/env python3
  2. Sie müssen den Dateimanager öffnen, unter Bearbeiten -> Einstellungen -> Verhalten auswählen, was mit ausführbaren Dateien geschehen soll

    Bildbeschreibung hier eingeben

    1. Stellen Sie schließlich sicher, dass für Ihre Datei selbst ausführbare Berechtigungen festgelegt wurden. chmod +x /path/to/script.pyKlicken Sie im Terminal und in der GUI mit der rechten Maustaste auf die Datei und ändern Sie deren Eigenschaften -> Berechtigungen

    Bildbeschreibung hier eingeben

    Bildbeschreibung hier eingeben

Anmerkung zur Shebang-Linie

Die allererste Zeile heißt shebang line und muss mit beginnen #!; Was als nächstes kommt, ist der Name des Interpreters, der Ihren Code liest. Wenn Sie verwenden, können python3Sie entweder #!/usr/bin/python3oder #!/usr/bin/env python3für die Portabilität verwenden. Wenn Sie keinen Code verwenden, der spezifisch für die Python-Version ist, verwenden Sie einfach#!/usr/bin/env python

Hinweis zur Skriptausgabe:

Wenn Ihr Skript die Ausgabe auf die Konsole druckt, muss es über ein Terminalfenster verfügen oder alternativ GUI-Dialogfelder wie z zenity. Verwenden Run in TerminalSie lieber die Option, wenn Sie den Code sehen möchten. Wenn Sie möchten, dass das Skript etwas tut, ohne die Konsolenausgabe zu sehen, verwenden Sie die RunOption.

Bildbeschreibung hier eingeben

Wenn Sie über Befehlszeilenparameter wie sys.argv[1]im Skript verfügen, können Sie diese nur festlegen, wenn das Terminalfenster geöffnet ist.

Sergiy Kolodyazhnyy
quelle
1
@PriyadarshiPaul Das ist dasselbe wie das FilesProgramm auf dem Launcher. In Windows-Sprache wäre das Datei-Explorer oderMy Computer
Sergiy Kolodyazhnyy
@PriyadarshiPaul es ist nautilusim Terminal
grooveplex
3
#!/usr/bin/env pythonruft Python2 auf den meisten Ubuntu-Systemen auf. Obwohl Sie ein für Python3 geschriebenes Python-Skript mit Python2 kompatibel machen können, würde ich nicht davon ausgehen, dass das OP dies getan hat. #!/usr/bin/env python3scheint ein passenderes shebang
Anthon
1
Und warum bringen wir hier Arch Linux auf den Markt? Vielleicht werde ich ein bisschen gemein rüberkommen, aber wir reden hier über Ubuntu. Unter Ubuntu ist Python standardmäßig mit Python 2.7 verknüpft. Wenn Sie Software entwickeln, sollten Sie sich wahrscheinlich darüber im Klaren sein, welche Verknüpfungen wo vorhanden sind. Wenn Sie eine andere als die Standardversion Ihres Betriebssystems verwenden, geben Sie dies explizit an. Natürlich können wir auf jede einzelne Frage eingehen, aber wenn Sie laut schreien - wenn Sie codieren, dann machen Sie es richtig.
Sergiy Kolodyazhnyy
3

Sie müssen den Speicherort des Programms zur Ausführung Ihres Codes in die erste Zeile stellen und dann das Skript so einstellen, dass es als ausführbare Datei ausgeführt wird, indem Sie seine Berechtigungen ändern. Dies setzt voraus, dass Sie Ihre Anwendungen über ein Terminal oder ein anderes Skript starten.

Finden Sie Ihre Python-Installation

$ which python
/usr/bin/python

Fügen Sie die Programme Lage auf der obersten Zeile des Programms mit einem #!vor

#!/usr/bin/python

# Python code goes here....

Setzen Sie das Python-Skript auf Ausführungsrechte

$ chmod 700 test.py

Jetzt können Sie das Skript direkt ausführen

$ ./test.py

Codeauflistung für test.py

#!/usr/bin/python

print "test"
Joseph
quelle
2

Wenn Sie dieses Programm ohne Eingabe ausführen möchten, python3 mnik.pymüssen Sie das Skript ausführbar machen und sicherstellen, dass python3es zum Ausführen verwendet wird.

Das erste kannst du machen indem du rennst

 chmod +x mnik.py

Die zweite Möglichkeit besteht darin , als erste Zeile eines Skripts eine Shebang-Zeile hinzuzufügen , die python3 aufruft . Auf allen Ubuntu-Systemen, mit denen ich gearbeitet habe und die mit python3 geliefert wurden, können Sie python3 erhalten, indem Sie die folgende Zeile oben hinzufügen:

#!/usr/bin/env python3

Nach diesen beiden Änderungen können Sie eingeben /path/to/mnik.py, ./mnik.pyoder einfach nur mnik.py(letzteres erfordert das Skript in Ihrem PATH zu sein).

Wenn Sie diese Änderungen vornehmen, können Sie auch eine Umbenennung mnik.pyin in Betracht mnikziehen. Dies ist bei Python-Paketen mit Befehlen, die auf PyPI veröffentlicht werden, üblich.

Anthon
quelle
ok, eines davon funktioniert jetzt nicht
Priyadarshi Paul
Was ist ok"? Worauf bezieht sich "diese"?
Anthon
Es heißt ** usr / bin / env: Schlechter Interpreter: Keine solche Datei oder Verzeichnis **
Priyadarshi Paul
Dort /fehlt zumindest eine Front. Bitte erläutern Sie, was in Ihrem Kommentar "Es" steht. Ist es die Bash Shell? Ist es Windows Command.com? Von wo aus rufen Sie das Programm auf und mit welcher Befehlszeilensyntax?
Anthon