为什么运行python
文件在运行时不需要x
权限:
python script.py
但是当它以:
运行时它会发生./script.py
答案 0 :(得分:8)
因为你使用python script.py
运行的是python程序;然后,它加载并运行您在参数中指定的脚本,即script.py
(基本上是文本文件)。脚本文件不需要是可执行文件,因为这里执行的是python解释器(python二进制文件本身,显然应该具有x
权限)。
使用.\script.py
,您尝试直接运行您的脚本(仍然是相同的文本文件)作为程序。当你这样做时,你希望用你在脚本代码第一行中指定的解释器解析它,例如“shebang”,例如#!/usr/bin/env python
。如果没有使用x
权限设置,操作系统不会尝试“执行”您的文件(尽管可能会尝试使用默认程序打开它,如果适用),因此,它不会关心家当。
答案 1 :(得分:4)
文件本身解释(读取)而不是在第一个示例中实际执行。 python应用程序是需要执行权限的。
在第二个示例中,文件本身正在执行,因此需要这些权限才能继续。
答案 2 :(得分:2)
当我们以python script.py
运行脚本时,我们实际上调用了python解释器,它通常位于/usr/bin/python
(which python
的输出将告诉您确切的位置)。
解释器依次读取脚本并执行其代码。 具有执行权限的解释器。
当脚本以./script.py
执行时,脚本将直接执行,因此脚本需要执行权限。使用的翻译是由shebang line指定的。
当内核发现前两个字节是#!
时,它会使用该行的其余部分作为解释器并将该文件作为参数传递。请注意,要执行此操作,文件需要具有执行权限。在前一种情况下,如果我们将脚本执行为./script.py
简而言之,通过method1执行,解释器只需要读取权限,但以后需要直接执行它