如何在Python3中设置文件权限?

Oz123:

Python的文档是相当简洁,有关如何使用类似功能os.fchmodos.chmod我对数字777和这样的表达感到困惑stat.S_IWRITE | stat.S_IEXEC

什么是mode=0o777我在一些功能上看到的os模块?

你能解释一下这是什么吗?

Oz123:

好。让我们从头开始。如果您了解linux,chmod那么您已经是理解的正确途径。

在Python 2中,您可以简单地在Django项目中执行以下操作:

>>> os.chmod('manage.py', 0666)

现在您将看到权限已更改:

git diff
diff --git a/manage.py b/manage.py
old mode 100755
new mode 100644

您刚刚看到的Python调用与在bash中执行的操作直接等效:

chmod 0666 manage.py

在更高的Python版本中,您可以使用os带有八进制数字的函数:

>>> os.chmod('manage.py', 0o666)

一开始可能看起来很奇怪。但这只是pep3127中引入的新语法因此,您不必在Python 0后面加上一个八进制数,而是在Python 0o后面加上一个八进制数。

最后,stat模块具有数值常数,您可以将其与按位或运算结合使用。它非常冗长,但让我们看一下。

>>> stat.S_IRUSR  # this means user read permissions
256

看起来像一个整数。但是实际上是由解释为二进制数os.chmod,因此您应该这样阅读:

>>> "{0:b}".format(stat.S_IRUSR)
'100000000'
>>>"{0:b}".format(stat.S_IWUSR)
'10000000'

好的,这很令人困惑,但是结帐len每个结果,前者要长1位

>>> len("{0:b}".format(stat.S_IWUSR))
8
>>> len("{0:b}".format(stat.S_IRUSR))
9

我们可以结合使用这些stat常量以获得适当的所需文件模式:

>>> "{0:b}".format(stat.S_IRUSR|stat.S_IWUSR) # this is read and write for the user
'110000000'

如果您想知道|这里的管道不是底部的管道。这是按位OR按位组合使用两个正数位,结果为9,前两位设置为1。这意味着用户可以读写文件。

检查一下:

>>> "{0:b}".format(stat.S_IRUSR|stat.S_IWUSR|stat.S_IWGRP|stat.S_IRGRP)
'110110000'

这开始看起来像chmodbash中通常的那样:

$ chmod 0660 manage.py
$ ls -l manage.py 
-rw-rw---- 1 oznt oznt 805 Mar 31 16:38 manage.py

Bash表示不仅以1或0表示的位,还表示其含义。因此,从左起第2位是用户的读许可,第3位是用户的写许可。接下来的一组位是组权限,依此类推。

最后,您可以将666bash中的模式与此Python中的模式相结合

os.chmod('manage.py', stat.S_IWGRP | stat.S_IRGRP | stat.S_IRUSR | stat.S_IWUSR | stat.S_IWOTH | stat.S_IROTH) 

如果时间太长,请再次检查您可以执行以下操作:os.chmod('manage.py', 0o666)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在python3中将.wav文件转换为频谱图

如何在iOS中设置文件夹/文件的权限

如何设置文件权限?

如何在Python3文件中打印__repr__?(不在外壳中)

python3如何设置在unittest中通过的测试

如何在Python3中解压缩用PKZIP以外的算法加密的文件?

如何在python3中将有组织的文件制作成字典?

如何在Python3中使用opencv从文件缓冲区读取文件

如何在绝对导入中设置不带点号的Pypi软件包-Python3

如何在python3中模拟文件对象

如何在Python3中将多行字符串读取为文件流?

如何在Python3中模拟没有读取权限的文件?

您如何在Python3中设置Cookie策略?

如何在Python3中基于Unicode代码点将汉字写入文件

如何在Mac上将Python3.9设置为python3的默认设置?

如何在Windows中的python3中导入文件/模块?

如何在Python3中的类中调用函数

如何在python3中创建二进制文件序列?

如何在OSX上为python3设置别名

如何在Git中设置权限?

如何在Windows上安装没有管理员权限的python3?

如何在Ansible中设置树的文件权限

如何在Bukkit中设置权限?

如何在python3中向文件添加文本

如何在python3中自己设置selenium的page_source?

如何在 Python3 中模拟文件系统部分

如何在 anaconda\env 中从 komodo edit 设置和运行不同的 python3 环境版本?

如何在Python3中使用变量创建json文件路径?

如何在 GitHub 中设置文件权限