Ausführen eines Python-Skripts vom Linux-Terminal aus

Ausführen eines Python-Skripts vom Linux-Terminal aus

Ich habe dieses Skript mit dem Namen pyAES.py heruntergeladen und in einem Ordner mit dem Namen Codes in einem Desktop-Verzeichnis meines Linux abgelegt.

Nach diesem Beispiel http://brandon.sternefamily.net/2007/06/aes-tutorial-python-implementation/

Wenn ich tippe,

./pyAES.py -e testfile.txt -o testfile_encrypted.txt

die Datei pyAES.py sollte ausgeführt werden. aber ich erhalte diesen Fehler,

pi@raspberrypi ~/Desktop/Codes $ pyAES.py
-bash: pyAES.py: command not found

Die Ausgabe des ls -lBefehls lautet:

pi@raspberrypi ~/Desktop/Codes $ ls -l
total 16
-rw-r--r-- 1 pi pi 14536 Oct  8 10:44 pyAES.py

Hier ist die Ausgabe nachchmod +x

pi@raspberrypi ~/Desktop/Codes $ chmod +x pyAES.py                              pi@raspberrypi ~/Desktop/Codes $
pi@raspberrypi ~/Desktop/Codes $ pyAES.py
-bash: pyAES.py: command not found
pi@raspberrypi ~/Desktop/Codes $

und der Befehl chmod +x pyAES.py && ./pyAES.pygibt den folgenden Fehler aus,

-bash: ./pyAES.py: /usr/bin/python2: bad interpreter: No such file or directory

Ich habe auch versucht, die Datei in /usr/bindas Verzeichnis zu verschieben und sie dann auszuführen.

pi@raspberrypi /usr/bin $ pyAES.py
-bash: /usr/bin/pyAES.py: /usr/bin/python2: bad interpreter: No such file or directory
pi@raspberrypi /usr/bin $

Ich sehe, dass die Datei im Verzeichnis /usr/bin vorhanden ist, aber es wird immer noch die Fehlermeldung „Keine solche Datei oder kein solches Verzeichnis“ angezeigt.

Ich möchte wissen, warum das Linux-Terminal das Python-Skript nicht ausführt.

Antwort1

Es scheint, als hätten Sie eine schlecht geschriebene Shebang-Zeile. Aus dem Fehler, den Sie erhalten:

-bash: /usr/bin/pyAES.py: /usr/bin/python2: bad interpreter: No such file or directory

Ich würde sagen, Sie sollten die erste Zeile /usr/bin/pyAES.pyauf

#!/correct/path/to/python

wobei dies /correct/path/to/pythonaus der Ausgabe von: zu entnehmen ist:

type -P python

Es ist /usr/bin/python(nicht /usr/bin/python2) auf meinem System.

Antwort2

"command not found"Sie erhalten den Fehler , weil die ausführbare Datei nicht in der Variable vorhanden ist /bin/oder /usr/bin/alle Pfade darin fehlen $PATH.

Wenn Sie einen beliebigen Befehl ausführen, sucht die Backend-Shell beispielsweise im Pfad nach der ausführbaren Datei/Binärdatei /bin/ /usr/bin/usw.

Wenn der Pfad also nicht richtig definiert ist, tritt dieses Problem auf.

und wenn Sie " " verwenden, ./commandwird dieser Befehl aus dem aktuellen Verzeichnis ausgeführt. Die Variable PATH wird nicht zum Suchen nach dem Dateinamen verwendet.

Antwort3

Die erste Hürde besteht darin, dass Sie der Shell mitteilen müssen, wo das Programm zu finden ist. Wenn Sie keinen Verzeichnishinweis eingeben, können Sie nur ausführbare Dateien ausführen, die sich im durch die PATHUmgebungsvariablen beschriebenen Suchpfad für ausführbare Dateien befinden. Das aktuelle Verzeichnis befindet sich nicht im Suchpfad, es sei denn, Sie geben es dort ein. Führen Sie daher „run“ aus ./pyAES.py.

Um ein Programm auszuführen, müssen Sie über Ausführungsberechtigungen dafür verfügen:

chmod +x pyAES.py

Wenn Sie eine Meldung wie „Fehlerhafter Interpreter: Keine solche Datei oder kein solches Verzeichnis“ oder einfach „Keine solche Datei oder kein solches Verzeichnis“ für eine vorhandene Datei erhalten, bedeutet dies, dass ein Fehler im Skript vorliegt.siebangZeile. (Siehe/bin/sh: ./check-dependencies.pl: nicht gefunden – aber check-dependencies.pl existiert!für eine ausführlichere Erklärung.) Die Shebang-Zeile ist die erste Zeile des Skripts und gibt den Speicherort des Interpreters an.

Um die Festcodierung des Pfads zu einem Interpreter (z. B. /usr/bin/pythonoder /usr/local/bin/python) zu vermeiden, können Sie das /usr/bin/envProgramm als Trampolin verwenden:

#!/usr/bin/env python

PEP 304gibt an, dass dies #!/usr/bin/env python2die richtige Art ist, auf Python 2.x zu verweisen. Es gibt jedoch viele vorhandene Systeme, bei denen Python 2.x nur unter dem Namen pythonund nicht bereitgestellt wird python2. Sie müssen also möglicherweise zwischen den beiden jonglieren. Wenn Sie Root-Berechtigungen haben und Ihre Distribution Python 2.x nur als pythonoder nur bereitstellt python2, erstellen Sie einen symbolischen Link zum anderen Namen.

Wenn Sie den Fehler „: Keine solche Datei oder kein solches Verzeichnis“ sehen (mit nichts vor dem Doppelpunkt), bedeutet das, dass Ihre Shebang-Zeile am Ende einen Wagenrücklauf hat, vermutlich weil sie unter Windows bearbeitet wurde. Entfernen Sie den Wagenrücklauf: Die Shebang-Zeile muss einen Unix habenZeilenende(nur Zeilenvorschub).

Antwort4

Beim Versuch trat der gleiche Fehler auf.py file1.py

Die Lösung ist ganz einfach: Geben Sie einfachpython3 file1.py

verwandte Informationen