如何在python中实现一个简单的“chmod+x”?

2024-04-27 10:31:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从一个可执行的python脚本中创建一个文件。

import os
import stat
os.chmod('somefile', stat.S_IEXEC)

似乎os.chmod不像unix chmod那样“添加”权限。当最后一行被注释掉时,文件的文件模式是-rw-r--r--,如果没有被注释掉,文件模式是---x------。如何在保持其余模式不变的情况下添加u+x标志?


Tags: 文件import脚本权限os标志模式unix
3条回答

使用os.stat()获取当前权限,使用|或这些位一起使用,并使用os.chmod()设置更新的权限。

示例:

import os
import stat

st = os.stat('somefile')
os.chmod('somefile', st.st_mode | stat.S_IEXEC)

对于生成可执行文件(例如脚本)的工具,以下代码可能有帮助:

def make_executable(path):
    mode = os.stat(path).st_mode
    mode |= (mode & 0o444) >> 2    # copy R bits to X
    os.chmod(path, mode)

这使得它(或多或少)尊重创建文件时生效的umask:可执行文件只为那些可以读取的文件设置。

用法:

path = 'foo.sh'
with open(path, 'w') as f:           # umask in effect when file is created
    f.write('#!/bin/sh\n')
    f.write('echo "hello world"\n')

make_executable(path)

如果您知道所需的权限,那么下面的示例可能是保持其简单的方法。

Python2:

os.chmod("/somedir/somefile", 0775)

Python3:

os.chmod("/somedir/somefile", 0o775)

兼容任一(八进制转换):

os.chmod("/somedir/somefile", 509)

参考permissions examples

相关问题 更多 >