LinuxターミナルからPythonスクリプトを実行する

LinuxターミナルからPythonスクリプトを実行する

私はpyAES.pyという名前のこのスクリプトをダウンロードし、Linuxのデスクトップディレクトリ内のcodesというフォルダに保存しました。

この例によれば、 http://brandon.sternefamily.net/2007/06/aes-tutorial-python-implementation/

入力すると、

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

pyAES.pyファイルを実行する必要がありますが、このエラーが発生します。

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

コマンドの出力ls -lは、

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

出力は次のようになりますchmod +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 $

そして、コマンドはchmod +x pyAES.py && ./pyAES.py次のエラーを出します。

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

ファイルを/usr/binディレクトリに移動してから実行してみましたが、

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 $

/usr/bin ディレクトリにファイルが存在することは確認できますが、そのようなファイルまたはディレクトリは存在しないというエラーが引き続き表示されます。

Linux ターミナルが Python スクリプトを実行しない理由を知りたいです。

答え1

シェバン行の記述が間違っているようです。 表示されるエラーは次のとおりです:

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

/usr/bin/pyAES.py最初の行を次のように設定するといいと思います

#!/correct/path/to/python

ここで、は/correct/path/to/python次の出力から見つけることができます:

type -P python

それは私のシステム上にはあり/usr/bin/pythonません/usr/bin/python2

答え2

"command not found"実行可能ファイルが変数内に存在しない/bin/か、変数/usr/bin/内のすべてのパスが存在しないため、エラーが発生します$PATH

任意のコマンドを実行すると、バックエンド シェルでは PATH 内の実行可能ファイル/バイナリ/bin/ /usr/bin/などが検索されます。

したがって、パスが適切に定義されていない場合は、この問題が発生します。

「」を使用すると、./command現在のディレクトリからそのコマンドが実行され、ファイル名の検索にPATH変数は使用されません。

答え3

最初のハードルは、シェルにプログラムがどこにあるかを伝える必要があることです。ディレクトリの指示を何もしない場合は、環境PATH変数で記述された実行可能検索パスにある実行可能ファイルのみを実行できます。現在のディレクトリは、そこに配置しない限り、検索パスにはありません。したがって、 を実行します./pyAES.py

プログラムを実行するには、そのプログラムに対する実行権限が必要です。

chmod +x pyAES.py

存在するファイルに対して「不正なインタープリタ: そのようなファイルまたはディレクトリはありません」または単に「そのようなファイルまたはディレクトリはありません」のようなメッセージが表示される場合は、スクリプトにエラーがあることを意味します。シバンラインを参照してください。(/bin/sh: ./check-dependencies.pl: 見つかりません — ただし、check-dependencies.pl は存在します。より詳細な説明については、こちらをご覧ください。) シバン行はスクリプトの最初の行であり、インタープリターの場所を示します。

/usr/bin/pythonインタープリタへのパス (例:または/usr/local/bin/python)をハードコーディングすることを避けるために、/usr/bin/envプログラムをトランポリンとして使用することができます。

#!/usr/bin/env python

ペップ304は、Python 2.x を参照するための正しい方法を指定します#!/usr/bin/env python2。ただし、Python 2.x が という名前でのみ提供されpython、 では提供されない既存のシステムも多数あります。そのため、2 つをうまく使い分ける必要があるかもしれません。ルート権限があり、ディストリビューションが Python 2.x を としてのみ提供しているか、 のみを提供しているpython2場合は、他の名前へのシンボリック リンクを作成します。pythonpython2

「: No such file or directory」というエラーが表示される場合(コロンの前に何もない)、シェバン行の最後にキャリッジリターンがあることを意味します。これはおそらくWindowsで編集されたためです。CRを削除します。シェバン行にはUnixが必要です。行末(改行のみ)。

答え4

私も同じエラーに遭遇しましたpy file1.py

解決策は非常に簡単です。python3 file1.py

関連情報