为什么运行一个python文件不需要执行权限?

Why running a python file doesn't require the execute permission?

为什么 运行 宁一个 python 文件不需要 x 权限当 运行 宁它是这样的:

python script.py

但是当 运行 为:

./script.py

它解释(读取)文件本身而不是在您的第一个示例中实际执行。 python 应用程序需要执行权限。

在第二个示例中,文件本身正在执行,因此需要这些权限才能继续。

因为你运行python script.py是python程序;然后,它加载并 运行s 您在参数中指定的脚本,即 script.py(基本上是一个文本文件)。脚本文件不需要是可执行文件,因为这里执行的是 python 解释器(python 二进制文件本身,显然应该具有 x 权限)。

使用 .\script.py,您尝试 运行 直接将您的脚本(仍然是相同的文本文件)作为程序。当你这样做时,你希望它用你在脚本代码的第一行中指定的解释器来解析,"shebang",例如#!/usr/bin/env python。如果未设置 x 权限,OS 不会尝试 "execute" 您的文件(尽管它可能会尝试使用默认程序打开它,如果适用),因此,它不会关心shebang。

当我们运行一个脚本作为python script.py时,我们实际上调用了通常位于/usr/bin/python的python解释器(which python的输出将告诉你具体位置)。

解释器依次读取脚本并执行其代码。 有执行权限的是解释器

当脚本作为 ./script.py 执行时,脚本将直接执行,因此 脚本 需要执行权限。使用的解释器由 shebang 行指定。

当内核发现前两个字节是 #! 时,它使用该行的其余部分作为解释器并将文件作为参数传递。请注意,要执行此操作,文件需要具有执行权限。在前一种情况下,如果我们将脚本执行为 ./script.py

,我们将间接执行内核会执行的操作

简而言之,通过method1执行,解释器只需要读权限,后面需要直接执行