Monica_MTF 2023-02-04 11:33 采纳率: 73.9%
浏览 16
已结题

PythonACL返回rwx字符串

Python#384
访问控制列表ACL(Access Control List)用来描述哪些用户能以什么样的方式访问指定文件或文件夹(统称为资源),ACL是一个整数(int),其中常用的是低9位二进制数,分为三组,每组3位,
左边第1组表示资源的创建者拥有的权限,
第2组表示与创建者同组的用户拥有的权限,
第3组表示其他用户拥有的权限。
每组中3位分别表示读、写、执行权限,0表示不具有该权限,1表示具有该权限。
例如,二进制数111 111 111作为ACL时表示一个资源的创建者、同组用户和其他用户都具有读、写、执行的权限,为了方便理解也常显示为字符串'rwx'、其中r表示可读、w表示可写、x表示可执行,不具有某个权限时表示为减号-。
函数 main() 接收一个小于等于511(也就是八进制的0o777)的整数mode,要求返回对应的rwx表示形式。
例如,main(511)返回'rwx',main(487)返回'rwxr--rwx'。
要求使用for循环,输出不能有多余内容。
考点:字符串
(虽然字很多,但感觉不会太难)
(每种情况都要考虑)
(这跟八进制有毛关系……)
我的思路:既然它是整数,也就是十进制数,先转二进制bin,再转字符串类型str,然后判断,输出字符串。

#000 000 000 
 #创建者权限、同组用户权限、其他用户权限
 #读、写、执行,0无权,1有权
 #111 111 111
 #rwxrwxrwx        r可读、w可写、x可执行、没权限-
 #mode<=5110o7770b0001 1111 1111
 #main(487),0o7470b0001 1110 0111
 #111 100 111 rwxr--rwx
def main(mode):
    s = str(bin(mode))
    ans=[]
    for i in range(len(s[3:5:3])):
        if s[3:5]==111:
            ans.append("rwx")  #列表方法
        elif s[3:5]==110:
            ans.append("rw-")
        elif s[3:5]==100:
            ans.append("r--")
        else :
            ans.append("---")

for j in range(len(s[3:5:3])):
       if s[6:8] == 111:
           ans.append("rwx")  #列表方法
       elif s[6:8] == 110 :
           ans.append("rw-")
       elif s[6:8]==100:
            ans.append("r--")
       else :
           ans.append("---")

for k in range(len(s[9:12:3])):
        if s[9:12]==111:
            ans.append("rwx")  #列表方法
        elif s[9:12]==110:
            ans.append("rw-")
        elif s[9:12]==100:
            ans.append("r--")
        else :
            ans.append("---")
return ans
'''
答题错误!您的代码执行结果为:
  File xxx.py, line 41
    return ans
    ^
SyntaxError: 'return' outside function
'''

ACL相关:

  • 写回答

2条回答 默认 最新

  • CodeBytes 2023-02-04 11:47
    关注

    该回答引用Chatgpt
    请参考下面的代码,如果可行还请点击 采纳,感谢!

    def display_acl(acl):
        acl_bin = format(acl, '09b')
        owner_perms = acl_bin[:3]
        group_perms = acl_bin[3:6]
        others_perms = acl_bin[6:]
    
        perms = {
            'r': 'read',
            'w': 'write',
            'x': 'execute'
        }
    
        owner = ''
        for i, perm in enumerate(owner_perms):
            if perm == '1':
                owner += list(perms.keys())[i]
    
        group = ''
        for i, perm in enumerate(group_perms):
            if perm == '1':
                group += list(perms.keys())[i]
    
        others = ''
        for i, perm in enumerate(others_perms):
            if perm == '1':
                others += list(perms.keys())[i]
    
        print(f'Owner: {owner}')
        print(f'Group: {group}')
        print(f'Others: {others}')
    
    display_acl(7)
    
    
    

    此代码将整数acl作为输入并将其转换为二进制字符串。然后,它将二进制字符串分成三个组,分别代表所有者、组和其他权限。然后代码将二进制值映射到 readable read、write和executepermissions 并输出结果。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月15日
  • 创建了问题 2月4日

悬赏问题

  • ¥15 Apache显示系统错误3该如何解决?
  • ¥30 uniapp小程序苹果手机加载gif图片不显示动效?
  • ¥20 js怎么实现跨域问题
  • ¥15 C++dll二次开发,C#调用
  • ¥15 请教,如何使用C#加载本地摄像头进行逐帧推流
  • ¥15 Python easyocr无法顺利执行,如何解决?
  • ¥15 求一个十多年前的国产符号计算软件(MMP)+用户手册
  • ¥15 为什么会突然npm err!啊
  • ¥15 java服务连接es读取列表数据,服务连接本地es获取数据时的速度很快,但是换成远端的es就会非常慢,这是为什么呢
  • ¥15 vxworks交叉编译gcc报错error: missing binary operator before token "("