Python3中如何设置文件权限?

2023-11-27

Python 自己的文档非常简洁地介绍了如何使用类似的函数os.fchmod, os.chmod。我对这样的数字感到困惑777和类似的表达方式stat.S_IWRITE | stat.S_IEXEC.

是什么mode=0o777我在一些函数中看到os module?

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


好的。让我们从头开始。如果你了解linuxchmod你已经是明白的正轨了。

在 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'

如果你想知道|这里不是像基地那样的管道。这是按位或。按位组合采用两个正位,并给出长度为 9 的结果,前两位设置为 1。这意味着用户可以读取和写入文件。

检查一下:

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

这开始看起来像平常一样chmod在bash中:

$ 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位是用户的写权限。下一组位是组权限等等。

最后,你可以组合模式666在 bash 中到 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).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3中如何设置文件权限? 的相关文章

随机推荐

  • Python:类似位的列表操作

    我正在尝试按元素 和按元素 2 个列表 每组 8 个列表 每组 6 个二进制数字 而且它的工作方式非常奇怪 c1 和 c2 以长度为 8 的元组开始 其元素为长度为 6 的元组 而 res 以 c1 的列表版本开始 anding for x
  • 如何使用sed删除某个范围内的Unicode?

    我想删除某个范围内的 Unicode 例如 echo abc 123 sed s uff21 uff3b g expect abc123 但得到 sed e表达式 1 字符20 无效范围结束 or use echo abc 123 sed
  • 如何在 Node.js 中使用相同的键设置多个 http 标头字段?

    我正在尝试设置使用 cloudflare 进行服务器推送 但它们需要多个link用于推送多个文件的标头字段 但是 我找不到任何记录的方法来在 node js 中包含具有相同键的多个标头字段 我尝试提供一个数组 但这只是将它们连接在一起作为单
  • 这种自由项变量错误(在宏展开时产生)可以避免吗?

    我正在开发 DSL 并且在扩展宏时遇到 自由术语 失败 我想知道是否可以避免 我把问题简化为以下情况 假设我们有这个表达式 val list join 0 1 2 3 println list 其中 join 是一个宏 其实现是 def j
  • 如何在 Repeater 项中找到选中的 RadioButton?

    我在 ASPX 页面上有一个 Repeater 控件 定义如下
  • 使用 Azure 在哪里存储用户图片等内容?斑点存储?

    我刚刚将我的一个测试用例项目迁移到微软的azure 但对于类似于头像上传的功能 我需要对硬盘上的文件进行写访问 但这是云 所以这是不可能的 我怎样才能构建这样的功能呢 我应该使用 Blob 存储还是有更好的解决方案 将所有网站图像 例如布局
  • 如何从 Firebase 实时数据库获取数据到 Flutter 列表中?

    我正在尝试使用模型将 Firebase 实时数据库中的数据检索到 Flutter 中的列表中 当我这样做时 我的列表返回为空 我已经阅读了其他几篇有关将 Firebase 与 Flutter 结合使用的文章 但尚未找到明确的答案 这是我当前
  • 标签下方的中心单选按钮

    假设我有一些单选按钮 其标签如下所示
  • Haskell:输入“导入”时解析错误

    我正在尝试重新创建输出这个哈斯克尔代码 forM flip mapM import Control Monad Cont main do forM 1 3 i gt do print i forM 7 9 j gt do print j w
  • 在表单中提交禁用的输入无法获取值

    形式如下
  • GTK# .NET 应用程序,无需单独安装 GTK#

    我在 Windows 上使用 MonoDevelop 开发 C 应用程序 发现我喜欢使用 GTK 而不是 winforms 然而 据我所知 到目前为止 您不能仅仅将 GTK 运行时嵌入到应用程序中 问题是我不想要求我正在开发的应用程序的最终
  • MySQL可以替换多个字符吗?

    我正在尝试替换 MySQL 字段中的一堆字符 我知道 REPLACE 函数 但它一次只能替换一个字符串 我看不到任何合适的功能在手册中 我可以一次替换或删除多个字符串吗 例如 我需要用破折号替换空格并删除其他标点符号 您可以链接 REPLA
  • 更新面板错误:在 UpdatePanel 中找不到 ID 为“xxx”的控件

    我有一个复合下拉日历用户控件 由文本框和日历图像以及验证控件组成 我在用户控件上公开了一个名为 TextBox 的属性 该属性返回对控件内使用的文本框的引用 这是用户输入日期的文本框 在 ASPX 页面中 我有一个此用户控件的实例
  • 传递可变参数模板参数的位置

    我想创建一个采用可变数量模板参数的函数 稍后 使用这些参数 函数应该像这样传递它们的位置 template
  • 长ID的性能

    我想知道这个问题已经有一段时间了 在 CouchDB 中 我们有一些相当日志的 ID 例如 000ab56cb24aef9b817ac98d55695c6a 现在 如果我们正在搜索该项目并浏览由视图创建的树结构 看起来一个简单的整数作为 i
  • 为什么派生类不能在此代码中调用受保护的成员函数?

    include
  • 线程和文件写入

    我有一个使用 20 个线程的 java 程序 他们每个人都将结果写入一个名为output txt 我总是得到不同数量的行output txt 会不会是线程同步的问题 有办法处理这个问题吗 难道是线程同步的问题 Yes 有办法处理这个吗 是的
  • 如何构建使用 CMake FetchContent 下载的外部库?

    我有一个依赖于外部库 例如 SDL 的程序 我希望 CMake 为我处理这种依赖性 所以我正在研究FetchContent 据我了解 该模块只是下载源代码 以便可以在以下位置获得有关外部库的信息配置时间 例如 include FetchCo
  • SVN:发布分支和外部?

    我们有两个针对同一客户的网站 主 www 网站和另一个位于单独服务器上的电子商务网站 它们使用共享的代码部分 各种功能 样式 javascript 等 目前 我们通过将共享代码作为 SVN 中的单独项目 在同一存储库中 并使用 svn ex
  • Python3中如何设置文件权限?

    Python 自己的文档非常简洁地介绍了如何使用类似的函数os fchmod os chmod 我对这样的数字感到困惑777和类似的表达方式stat S IWRITE stat S IEXEC 是什么mode 0o777我在一些函数中看到o