运行Python脚本的方式有所不同

时间:2014-02-17 17:23:00

标签: python django

我有一个非常简单的Python问题,使用Django的例子。运行Python脚本时,是否始终必须在脚本文件名前加上 python 命令?

在我关注的Django教程中,一些命令如下:

django-admin.py startproject mysite

然而,其他是这样的:

python manage.py runserver

为什么顶级的人不需要 python 命令?

或者,如果我的系统知道我的python解释器要执行所有Python脚本,那么为什么底层需要 python 命令?

2 个答案:

答案 0 :(得分:3)

答案在于两件事的结合:

  1. shebang,文件的第一行。
  2. 文件的权限,即是否设置了executable标志。
  3. 考虑django-manage.py的第一行。在我的系统上,它位于/usr/local/bin/django-admin.py,第一行是:

    #!/usr/bin/python2.7
    

    文件的权限:

    -rwxr-xr-x 1 root root 127 Jan  9 13:38 /usr/local/bin/django-admin.py
    

    shebang告诉我的操作系统我想用/usr/bin/python2.7的解释器执行该文件。权限中的x个字符表示它是可执行文件。我不需要事先指定python,因为操作系统可以从上面的信息中自动找出这些内容。


    现在,对于我通过运行manage.py制作的新创建的django-admin.py startproject mysite,它看起来像这样:

    #!/usr/bin/env python
    

    和权限:

    -rw-r--r-- 1 wim wim 249 Feb 17 17:33 manage.py
    

    shebang表示要使用env指向的任何python解释器,因此该部分已经到位。但是该文件缺少可执行权限,因此仅运行./manage.py将无法正常工作。

    通过使用django-manage.py显式设置可执行标志,我可以使其与chmod +x manage.py的行为相同。之后,当您在目录中执行x时,您应该看到设置了ls -l标志,并且您应该能够在不事先指定python的情况下运行该文件。

    注意: 仍然必须使用./manage.py,而不仅仅是manage.py,这种差异是因为django-admin.py生活在{ {1}}包含PATH,而/usr/local/bin/文件可能不包含{1}}。所以我们在shell中明确指定路径,其中manage.py指的是当前目录。

答案 1 :(得分:1)

您可以使用chmod +x script.py使脚本可执行,但您需要shebang行,通常是#!/usr/bin/python
如果你在基于unix的机器(mac,linux)上大量使用脚本,那么使用别名会很有用:
alias command="python path/to/script.py"