gpt4 book ai didi

python - Python 脚本运行方式的差异

转载 作者:太空狗 更新时间:2023-10-29 21:07:21 24 4
gpt4 key购买 nike

我有一个非常简单的 Python 问题,其中包含使用 Django 的示例。运行 Python 脚本时,我是否总是必须在脚本文件名之前加上 python 命令?

在我正在学习的Django教程中,一些命令如下:

django-admin.py startproject mysite

然而,其他的是这样的:

python manage.py runserver

为什么上面那个不需要python命令?

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

最佳答案

答案在于两件事的结合:

  1. shebang , 文件的第一行。
  2. 文件的权限,即是否executable是否设置标志。

考虑 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,因为操作系统可以从上述信息中自动找出这些东西。


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

#!/usr/bin/env python

权限:

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

shebang 指示使用我的 env 指向的任何 python 解释器,因此该部分已经到位。但是该文件缺少可执行权限,因此仅运行 ./manage.py 还行不通。

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

注意:确实仍然需要使用./manage.py,而不仅仅是manage.py,这种差异是因为 django-admin.py 位于 /usr/local/bin/ 中,它包含在 PATH 中而 manage.py 文件可能没有。所以我们在 shell 中明确指定路径,其中 . 指的是当前目录。

关于python - Python 脚本运行方式的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21835424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com