Python脚本仅能使用"python"命令运行
在Linux(Ubuntu 11.04)上,不知道为什么,一个Python脚本(具体来说是Django的manage.py,但我觉得这没什么关系)最近开始表现得很奇怪:
当我用
python manage.py
来运行时,一切正常;但是,用
./manage.py
来运行时,就出现了以下错误:
: No such file or directory
这个文件的权限是766。有什么想法吗?
5 个回答
2
我怀疑文件顶部的shebang写错了。这个文件应该以以下两种方式之一开始:
#!/usr/bin/python
(这里的python路径是你运行which python
命令得到的结果)
或者
#!/usr/bin/env python
6
你的文件里面有换行符。你是在Windows的文本编辑器里写的吗?
试试运行 dos2unix manage.py manage.py
这个命令。
3
glenn jackman的回答是对的,但我没有足够的“声望”去给他点赞,所以我在这里发一下。你的脚本是Windows格式的,每一行都以回车和换行符结束,而不是仅仅以换行符结束。很多程序,包括Python,都能处理这两种格式,没有问题。但是当你运行这个脚本时,命令行认为回车符是命令名称的一部分。结果,它不是在运行“/usr/bin/env python”,而是在尝试运行“/usr/bin/env python^M”(其中^M是换行符)。你可以通过错误信息看出这是怎么回事。在“No such file or directory”之前,它会打印出它尝试执行的程序名称。它也打印了换行符,这导致光标回到了行的最左边,把冒号前面的内容都擦掉了。
如果你没有安装dos2unix,可以用下面的命令去除换行符:
tr -d '\r' < manage.py > manage2.py; mv manage2.py manage.py
你不能同时从同一个文件读取和写入,这就是为什么你需要使用一个临时文件来保存tr
的输出。