我试图在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问题,似乎没有人回答为什么会发生这个问题。
答案 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文件。