web-dev-qa-db-ja.com

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

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

この例によれば、 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スクリプトを実行していない理由を教えてください。

7
Sufiyan Ghori

あなたはひどく書かれたシバンラインを持っているようです。あなたが得ているエラーから:

-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ではない)です。

5
Joseph R.

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

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

chmod +x pyAES.py

存在するファイルに対して「不正なインタープリター:そのようなファイルまたはディレクトリはありません」または単に「そのようなファイルまたはディレクトリはありません」などのメッセージを受け取った場合、スクリプトの Shebang 行にエラーがあることを意味します。 (詳細は / bin/sh:./check-dependencies.pl:not found — but check-dependencies.pl exists! を参照してください。)Shebang行はスクリプトの最初の行ですインタープリターの場所を示します。

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

#!/usr/bin/env python

PEP 304 は、Python 2.xを参照するために#!/usr/bin/env python2がすぐに使用されることを指定します。ただし、Python 2.xがpythonという名前でのみ提供され、python2ではなく提供される既存のシステムはたくさんあります。したがって、この2つを両立させる必要があるかもしれません。 root権限があり、ディストリビューションがPython 2.xをpythonとしてのみ提供するか、python2のみを提供する場合は、他の名前へのシンボリックリンクを作成します。

エラー:「そのようなファイルまたはディレクトリはありません」(コロンの前に何もない)が表示された場合、おそらくWindowsで編集されたため、Shebang行の最後に改行があることを意味します。 CRを削除します。Shebang行にはUnix line ending (改行のみ)が必要です。

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

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

したがって、パスが適切に定義されていないと、この問題に直面します。

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

2
Rahul Patil

pythonファイルの最初の行は次のようになります。

#!/usr/bin/python 

その行は、使用するインタープリターのlinuxを示しています。 Pythonへのパスがわからない場合は、次のように入力します。

which python

最初の行にパスを追加します(例 "#!/ PATH")。ファイルは実行可能である必要があります。 "chmod + x NAME.py"で実行しました。次に、PATH環境変数(例: "/ usr/bin"または "/ usr/local/bin")にリストされているフォルダーにファイルを追加(コピーまたはシンボリックリンクを作成)します。

2
Luka Klarić