你如何做一个简单的“chmod + x”从python内?
我想从一个可执行的python脚本中创build一个文件。
import os import stat os.chmod('somefile', stat.S_IEXEC)
它看起来os.chmod
没有“添加”权限的方式unix chmod
做的。 最后一行注释掉了,文件的文件模式是-rw-r--r--
,没有注释掉,文件模式是---x------
。 我怎么才能添加u+x
标志,同时保持其余的模式不变?
使用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)
这使得它(或多或less)尊重创build文件时生效的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)
如果你知道你想要的权限,那么下面的例子可能是保持简单的方法。
os.chmod(“/ somedir / somefile”,0775)
引用权限示例
你也可以做到这一点
>>> import os >>> st = os.stat("hello.txt")
当前文件列表
$ ls -l hello.txt -rw-r--r-- 1 morrison staff 17 Jan 13 2014 hello.txt
现在做这个。
>>> os.chmod("hello.txt", st.st_mode | 0o111)
你会在terminal看到这个
ls -l hello.txt -rwxr-xr-x 1 morrison staff 17 Jan 13 2014 hello.txt
你可以按位或0o111使所有可执行文件,0222使所有可写,0444使所有可读。