![从 Linux 终端运行 python 脚本](https://linux22.com/image/50960/%E4%BB%8E%20Linux%20%E7%BB%88%E7%AB%AF%E8%BF%90%E8%A1%8C%20python%20%E8%84%9A%E6%9C%AC.png)
我已经下载了这个名为 pyAES.py 的脚本,并将其放入 Linux 桌面目录中的一个名为 code 的文件夹中,
根据这个例子, 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
看来你的 shebang 台词写得很糟糕。从您收到的错误来看:
-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
。
当你运行任何命令时,后端 shell 会在 PATH 中搜索该可执行文件/二进制文件,例如/bin/
/usr/bin/
等等……
因此,如果路径定义不正确,那么您将面临这个问题。
当您使用“ ./command
”时,它将从当前目录执行该命令,PATH变量不用于搜索文件名
答案3
第一个障碍是您需要告诉 shell 在哪里可以找到该程序。如果不放置任何目录指示,则只能运行位于PATH
环境变量描述的可执行搜索路径中的可执行文件。当前目录不在搜索路径中,除非您将其放在那里。所以跑吧./pyAES.py
。
为了运行程序,您必须拥有它的执行权限:
chmod +x pyAES.py
如果您在存在的文件上收到类似“错误解释器:没有这样的文件或目录”或只是“没有这样的文件或目录”的消息,则意味着脚本的错误舍邦线。 (看/bin/sh: ./check-dependency.pl: 未找到 — 但 check-dependency.pl 存在!以获得更详细的解释。)shebang 行是脚本的第一行,指示解释器的位置。
为了避免硬编码解释器的路径(例如/usr/bin/python
或/usr/local/bin/python
),您可以将该/usr/bin/env
程序用作蹦床:
#!/usr/bin/env python
PEP 304指定#!/usr/bin/env python2
立即引用 Python 2.x。然而,在许多现有系统中,Python 2.x 仅以名称提供python
,而不是python2
.所以你可能必须在两者之间权衡。如果您拥有 root 权限,并且您的发行版仅提供 Python 2.x aspython
或仅提供python2
,请创建指向其他名称的符号链接。
如果您看到错误“:没有这样的文件或目录”(冒号之前没有任何内容),则意味着您的 shebang 行末尾有一个回车符,可能是因为它是在 Windows 下编辑的。删除 CR:shebang 行需要有 Unix行尾(仅换行)。
答案4
当我尝试时,我遇到了同样的错误py file1.py
解决方案很简单,只需输入python3 file1.py