设置

设置

我想我在这里误解了一些东西。我制作了一个简单的python测试文件来查看权限如何影响python文件的使用。我这样做是为了能够回答64位ubuntu 12.04 python无法运行现有的python文件

设置

我创建了一个 test.py 文件,内容如下

print 'I am working'

测试用例 1

ls -al test.py 
-rw-r--r-- 1 joey joey 25 Dec 24 11:11 test.py
python test.py
I am working
  • 为什么我没有执行这个文件,但是 Python 却在执行它chmod +x test.py

测试用例 2

chmod 400 test.py
ls -al test.py 
-r-------- 1 joey joey 25 Dec 24 11:11 test.py
python test.py
I am working

那么显然 python 只需要读取权限就可以执行我的文件?

测试用例 3

chmod 200 test.py
ls -al test.py 
--w------- 1 joey joey 25 Dec 24 11:11 test.py
python test.py
python: can't open file 'testo.py': [Errno 13] Permission denied

写入权限不足(并且据记录,只有可执行权限也不足)。

  • python为什么会执行没有可执行权限的文件?

答案1

是的,Python 只需要读取文件内容。回想一下,Python 是一种解释型语言(如 PHP、Ruby 等),它只处理文件的内容,而不是执行文件;这python是可执行文件!

为了获得正确的背景信息,请注意您可以通过两种方式运行脚本:

  • 使用文件作为输入/参数来调用解释器不需要除读取权限之外的其他权限,例如:

     python myscript.py
    
  • 通过其运行脚本舍邦 需要设置可执行位,因为它将启动一个新进程,即 Python 解释器。

     ./myscript.py
    

    那么 shebang(文件的第一行)应该是这样的

     #!/usr/bin/env python
    

    定义该文件的解释器。

注意:在前一种形式下运行时,这样的 shebang 行在 Python 中也是注释(因此会被忽略),因此它可以双向工作。如果用户在一次运行中需要不同的解释器版本,例如python3.10 myscript.py如果您不喜欢默认版本,则可能很有用python。这就是为什么您可能会看到后一种形式在任何入口点/脚本中都相当常见。

答案2

“python只需要读权限”来读取你的文件内容并处理代码。

您的用户可以执行 python。然后 python 可以读取文件(因为 400)。如果您想直接执行文件(如“ ./testo.py ”),则需要文件的执行权限。

相关内容