我可以使用 os.stat(pathname)
获取路径名的 perssmions、mtime、atime....
但是,我有一个具有“+i”属性的文件,您可以通过以下方式查看它:
lsattr/tmp/test.py
有没有办法通过使用 python 知道路径名是否具有 '+i' 属性?
最佳答案
This related SO post关于为什么 os.chflags
在 Linux 上不存在显示了一种使用 解决
.但是,它依赖于从头文件 (ext2fs/ext2_fs.h) 复制常量定义,因此它很脆弱。更永久的解决方案需要编写一些 C 语言或类似 Cython 的东西。os
模块中缺少 lsattr
的方法fcntl
与此同时,PM 2Ring 的答案有效,但应该对其进行修改以使用包含字母“i”的路径。也许有名望的人可以评论或编辑该答案(这是我的第一篇文章)?
import subprocess
def is_immutable(fname):
p = subprocess.Popen(['lsattr', fname], bufsize=1, stdout=subprocess.PIPE)
data, _ = p.communicate()
#print(data)
return 'i' in data
def is_immutable_safe(file_path):
"""Check if the immutable flag is set on a Linux file path
Uses the lsattr command, and assumes that the immutable flag
appears in the first 16 characters of its output.
"""
return 'i' in subprocess.check_output(['lsattr', file_path])[:16]
# These assertions will pass if the immutable bit is not set on
# /etc/inittab on your system
assert is_immutable('/etc/inittab') is True
assert is_immutable_safe('/etc/inittab') is False
关于python获取linux文件不可变属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35501249/