权限被拒绝在linux中使用shebang行运行python脚本

时间:2017-07-07 13:55:48

标签: python linux bash python-2.7 unix

我试图在linux中运行python脚本而不显式调用python。 我的目标是让$ myscript.py运行我的脚本。目前正在调用$ python myscript.py,但我希望不必输入额外的命令以方便使用。我将shebang行添加到我的脚本的第一行以获得正确的python调用。我尝试了以下两行,但对我来说都没有。

#!/usr/bin/env python2.7
#!/usr/local/bin/python2.7

问题是我得到以下行为

$ python2.7 myscript.py    # This will run

$ myscript.py           # This is the error
$ ./myscript.py         # This will also error
: Permission denied     # Error message

当我在文件上ls -ltr时,我拥有脚本和可执行文件的可执行权限

-rwxrwxr-x 1 uname users   3544 Jul  7 08:46 myscript.py
-rwxr-xr-x 1 root  root 6231413 Jul  7 00:57 /usr/local/bin/python2.7

我也可以在命令行中调用python,输入在shebang行中写入的内容。

/usr/bin/env python2.7
/usr/local/bin/python2.7

都在终端中运行python。

我遇到了以下stackoverflow问题,似乎没有人回答为什么会发生这个问题。

bash permission denied for python

Python script: problems with shebang line (unix)

2 个答案:

答案 0 :(得分:0)

确保在linux上运行时使用LF行结尾而不是CRLF行结尾!谢谢@jwodder的建议。

我使用sublimetext在windows中编辑我的文件并在linux机器上运行文件。我更改了sublime中的首选项以使用unix行结尾(LF),但我已经在DOS结尾(CRLF)中编写了该文件。我以为它会为我换掉线路结尾。我的假设是错误的。我将它们全部转换为LF,脚本按预期运行。

答案 1 :(得分:0)

我有同样的问题。

实际上我在同一目录中有两个不同的python文件。一个人将执行> myfile1.py 正确。

另一个不会,如上面的解释

  

myfile2.py   /home/mylogin/PYTHON/myfile2.py:权限被拒绝。

我们在Windows上用notepad ++创建了一个,而在linux上用vi创建了另一个。

jwodder解决了这个问题。

解决方案是:dos2unix *用于目录中的所有python文件。