Python脚本仅能使用"python"命令运行

-1 投票
5 回答
1000 浏览
提问于 2025-04-17 03:48

在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的输出。

撰写回答