2011-10-06 63 views
-1

在Linux(Ubuntu 11.04)上,出于某种原因,Python脚本(特别是Django的manage.py,但我认为不重要)最近开始表现奇怪:Python脚本只能使用“python”命令运行

当作为

python manage.py 

运行它运行得很好;然而,随着

./manage.py 

它显示了以下错误:

: No such file or directory 

该文件的权限是766任何想法?

+0

如果没有人帮助你,你可以尝试http://askubuntu.com/ – Iznogood

+0

你的脚本中的shebang行是什么?Python真的在那里生活吗? – kindall

+0

可能应该迁移到Unix。 –

回答

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

+1

呃。你会认为这个shell比那个更强大。 –

+0

@Tom Zych,我不确定你希望壳做什么。如果你告诉它运行一个名为/ usr/bin/python^M的程序,并且该文件不存在,它应该做什么? – jlp

+1

它应该认识到'^ M'是行终止符的一部分,并忽略它。这不是航天科技。 –

1

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

+0

如果他没有执行权限,它会说:'权限被拒绝,而不是'找不到文件' – tMC

+0

正确,好点。尽管如此,它不应该是世界可写的,这是一个安全漏洞。有人可以在里面隐藏一个'rm -rf〜'。 –

2

我怀疑文件顶部的shebang不正确。 文件应该都可以启动:

#!/usr/bin/python 

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

#!/usr/bin/env python 
+2

其可能'/ usr/bin/env'不是'/ bin/env' – tMC

0

当您直接运行的脚本,该脚本开始在第一行中指定的翻译员:

#!COMMAND 

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

#!/usr/bin/env python 

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

6

你的文件有回车符。你有没有在Windows文本编辑器中编写它?

尝试运行dos2unix manage.py manage.py

相关问题