Python脚本仅使用“python”命令运行

时间:2011-10-06 19:21:44

标签: python linux shell

在Linux(Ubuntu 11.04)上,出于某种原因,Python脚本(特别是Django的manage.py,但我认为不重要)最近开始表现得很奇怪:

运行时
python manage.py

它运行得很好;但是,

./manage.py

它显示以下错误:

: No such file or directory

文件的权限是766.有什么想法吗?

5 个答案:

答案 0 :(得分:6)

您的文件中有回车符。你是否在Windows文本编辑器中编写了它?

尝试运行dos2unix manage.py manage.py

答案 1 :(得分:3)

格伦杰克曼的回答是正确的,但我没有足够的“声誉”来支持他,所以我会在这里发布。您的脚本采用Windows格式,其中每一行都以回车符和换行符结束,而不仅仅是换行符。许多程序,包括python,都可以处理任何格式而没有问题。但是当您运行脚本时,shell认为回车是命令名称的一部分。您的shell不是运行“/ usr / bin / env python”而是尝试运行“/ usr / bin / env python ^ M”(其中^ M是换行符)。你可以告诉它是这种情况,因为它给你的错误信息。就在“没有这样的文件或目录”之前,它会打印它试图执行的程序的名称。它也打印了换行符,它将光标移回到行中最左边的位置,这样可以清除冒号前的所有内容。

如果您没有安装dos2unix,可以使用

删除换行符
tr -d '\r' < manage.py > manage2.py; mv manage2.py manage.py

您无法同时读取和写入同一文件,这就是您必须使用临时文件来保存tr输出的原因。

答案 2 :(得分:2)

我怀疑文件顶部的shebang是不正确的。 该文件应以:

开头
#!/usr/bin/python

(其中python路径是which python的输出)

#!/usr/bin/env python

答案 3 :(得分:1)

如果权限为766并且您不是所有者,则您无权执行该权限。 6表示您可以读写但不能执行。像这样的系统文件是世界可写的是不寻常的;通常是755。如果您拥有根本权限,请使用chmod 755 manage.py进行修复。

答案 4 :(得分:0)

直接运行脚本时,脚本将使用第一行中指定的解释器启动:

#!COMMAND

其中COMMAND是shell脚本的/ bin / bash。对于python,最好使用

#!/usr/bin/env python

这样就可以选择环境中的python版本了。