【问题标题】:Combining file permissions合并文件权限
【发布时间】:2011-11-21 23:38:12
【问题描述】:

我想为我在 python 中创建的文件设置可执行权限。 如果我执行os.chmod(file, stat.S_IXUSR),则会覆盖现有权限。如何将文件的现有权限与可执行权限相结合?

【问题讨论】:

    标签: python file permissions


    【解决方案1】:

    stat它先。

    mode = os.stat(filename).st_mode
    os.chmod(filename, mode | stat.S_IXUSR)
    

    【讨论】:

    • 你在这里有一个竞争条件 - 但可能没有它就无法完成 - 所以 +1 :-)
    • @glglgl:可以尝试锁定文件,但我不记得它是否会阻止模式更改。
    • 可能不会。我只是以strace chmod g+w <file> 为例,它也没有这样做。所以我想你的答案是绝对正确的。
    • 如果在查询 st_mode 和 chmod() 之间的时间内,另一个进程碰巧尝试更改模式,它的动作会被默默地吞下。但是如果我再想一想,如果同时从多个进程中发生动作,那可能随时发生,所以我可能弄错了。
    【解决方案2】:

    可能只是

      os.system('chmod %d "%s"' % ("+x", file))
    

    应该做的伎俩

    【讨论】:

    • 问题可能是它的 Python 等价物。
    • 如果要运行外部进程,请使用subprocess,而不是os.system
    • 另外,格式化会因为这个格式字符串和那些参数而失败。
    • @Louis 如果我的文件是一本有声读物并且名为The Guy Named "Bertie".mp3,该怎么办?
    • 确实,我的快速脏样本只是一个糟糕的解决方案。我建议删除我的答案。 (我几年前在一个简单的情况下使用它,所有文件名都具有相同的简单格式“file001”、“file002”、“file003”......并且认为它可能会有所帮助,但另一个答案显然是唯一的好答案。
    猜你喜欢
    • 2015-10-18
    • 1970-01-01
    • 2016-04-21
    • 2012-12-16
    • 2011-06-12
    • 1970-01-01
    • 2011-09-24
    • 2011-03-29
    相关资源
    最近更新 更多