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

问题描述:

为什么这样运行它时运行python文件不需要x权限:为什么运行python文件不需要执行权限?

python script.py 

但它确实当它被运行为:

./script.py 

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

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

+1

要了解更多关于这是如何工作的,寻找unix shebangs https://en.wikipedia.org/wiki/Shebang_%28Unix%29 – xvan

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

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

当我们运行一个脚本python script.py我们实际调用Python解释器,其大致位于/usr/bin/python(的which python输出会告诉你确切位置)。

解释器依次读取脚本并执行其代码。 有执行许可的翻译器是

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

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

总之通过方法1执行解释需要只读权限,但对于后来它需要执行它直接