it-swarm.com.de

Führen Sie im Terminal ein python Skript ohne den python Befehl aus

Ich habe ein python Skript, nennen wir es script1.py. Ich kann es im Terminal folgendermaßen ausführen:

python /path/script1.py
...

aber ich möchte wie ein Kommandozeilenprogramm laufen:

arbitraryname
...

wie kann ich es tun ?

45
Alpagut

Sie verwenden ein Shebang-Zeile am Anfang Ihres Skripts:

#!/usr/bin/env python

mache die Datei ausführbar:

chmod +x arbitraryname

und lege es in ein Verzeichnis auf deinem PFAD (kann ein Symlink sein):

cd ~/bin/
ln -s ~/some/path/to/myscript/arbitraryname
78
Martijn Pieters

Es gibt drei Teile:

  1. Fügen Sie oben in Ihrem Skript ein "Shebang" hinzu, das die Ausführung Ihres Skripts beschreibt
  2. Erteilen Sie dem Skript die Berechtigung "Ausführen".
  3. Erstellen Sie das Skript in Ihrem PATH, damit Sie es von überall ausführen können.

Hinzufügen eines Shebang

Sie müssen einen Shebang am oberen Rand Ihres Skripts hinzufügen, damit die Shell weiß, welcher Interpreter beim Parsen Ihres Skripts verwendet werden soll. Es ist in der Regel:

#!path/to/interpretter

Um den Pfad zu Ihrem python interpretter auf Ihrem Computer zu finden, können Sie den folgenden Befehl ausführen:

which python

Dadurch wird Ihr Pfad durchsucht, um den Speicherort Ihrer python ausführbaren Datei zu finden. Es sollte ein absoluter Pfad zurückgegeben werden, den Sie dann zur Bildung Ihres Shebang verwenden können. Stellen Sie sicher, dass sich Ihr Shebang oben auf befindet Ihr python Skript:

#!/usr/bin/python

Führen Sie Berechtigungen aus

Sie müssen Ihr Skript mit Ausführungsberechtigungen versehen, damit Ihre Shell weiß, dass Sie es tatsächlich ausführen möchten, wenn Sie versuchen, es als Befehl zu verwenden. Dazu können Sie diesen Befehl ausführen:

chmod +x myscript.py

Fügen Sie das Skript Ihrem Pfad hinzu

Die Umgebungsvariable PATH ist eine geordnete Liste von Verzeichnissen, die Ihre Shell durchsucht, wenn Sie nach einem Befehl suchen, den Sie ausführen möchten. Wenn Sie also möchten, dass Ihr python ein Befehl ist, den Sie von überall ausführen können, muss er sich in Ihrem PATH befinden. Sie können den Inhalt Ihres Pfads sehen, in dem der Befehl ausgeführt wird:

echo $PATH

Dies gibt eine lange Textzeile aus, in der jedes Verzeichnis durch ein Semikolon getrennt ist. Wann immer Sie sich fragen, wo sich der tatsächliche Speicherort einer ausführbaren Datei befindet, die Sie in Ihrem PATH ausführen, können Sie ihn mit dem folgenden Befehl finden:

which <commandname>

Jetzt haben Sie zwei Möglichkeiten: Fügen Sie Ihr Skript einem Verzeichnis hinzu, das sich bereits in Ihrem PATH befindet, oder fügen Sie Ihrem PATH ein neues Verzeichnis hinzu. Normalerweise erstelle ich ein Verzeichnis in meinem Benutzerverzeichnis und füge es dann als PFAD hinzu. Um Ihrem Pfad Dinge hinzuzufügen, können Sie den Befehl ausführen:

export PATH=/my/directory/with/pythonscript:$PATH

Jetzt sollten Sie in der Lage sein, Ihr python als Befehl auszuführen. ABER! Wenn Sie das Shell-Fenster schließen und ein neues öffnen, merkt sich das neue nicht, was Sie gerade geändert haben Wenn Sie also möchten, dass diese Änderung gespeichert wird, müssen Sie diesen Befehl unten in Ihrem .bashrc- oder .bash_profile-Ordner hinzufügen

49
arajek

Fügen Sie die folgende Zeile an den Anfang script1.py

#!/usr/bin/env python

und dann das Skript ausführbar machen:

$ chmod +x script1.py

Wenn sich das Skript in einem Verzeichnis befindet, das in Ihrer Variablen PATH angezeigt wird, können Sie einfach eingeben

$ script1.py

Andernfalls müssen Sie den vollständigen Pfad angeben (entweder absolut oder relativ). Dies schließt das aktuelle Arbeitsverzeichnis ein, das nicht in Ihrem PATH sein sollte.

$ ./script1.py
11
chepner

Sie müssen ein Hashbang verwenden. Fügen Sie es in die erste Zeile Ihres python - Skripts ein.

#! <full path of python interpreter>

Ändern Sie dann die Dateiberechtigungen und fügen Sie die Ausführungsberechtigung hinzu.

chmod +x <filename>

Und schließlich führen Sie es mit

./<filename>

Wenn es sich im aktuellen Verzeichnis befindet,

2
asheeshr