我想我在这里误解了一些东西。我制作了一个简单的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 ”),则需要文件的执行权限。