我可以使用https://www.elastic.co/guide/en/watcher/current/condition.html
获取路径名的咒语,mtime,atime ....
但是,我有一个文件,其中有一个' + i'属性,你可以看到:
os.stat(pathname)
有没有办法知道路径名是否有' + i'使用python属性?
答案 0 :(得分:0)
似乎没有class VideoWriter:
def __init__(self, fn=None, fcc='MJPG', fps=7.5):
...
self.fcc, self.fps, self.dt = fcc, fps, 1./fps
self.q, self._stop, self.n = Queue.Queue(), False, 0
self.wrtr = threading.Thread(target=self._writer)
self.wrtr.start()
def _writer(self):
frm = firstTime = vw = None
while True:
if self._stop:
break
# get most recent frame
while not self.q.empty():
frm = self.q.get_nowait()
if frm is not None:
if vw is None:
vw = cv2.VideoWriter(self.fn+self._EXT, cvFourcc(self.fcc),
self.fps, imgSize(frm), isColor=numChannels(frm)>1)
firstTime = time.time()
vw.write(frm)
self.n += 1
dt = self.dt if firstTime is None else max(0,
firstTime + self.n*self.dt - time.time())
time.sleep(dt)
# write frame; can be called at rate different from fps
def write(self, frm):
self.q.put(frm)
模块函数来获取这些Linux文件属性,但您可以使用subprocess
模块在Python中调用os
命令。
下面的代码应该适用于Python 2或3,尽管在最近的Python版本中它可以更紧凑。
FWIW,我在我的fstab文件上设置了lsattr
位,因为我厌倦了随机消失。
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.split(None, 1)[0]
print(is_immutable("/etc/fstab"))
但是,如果文件名中存在“i”,还会检测到“i”!新版本仅在属性标志中检测到“i”。谢谢,sverasch引起了我的注意。
答案 1 :(得分:0)
This related SO post关于Linux上不存在os.chflags
的原因显示了使用lsattr
解决os
模块中fcntl
缺席问题的方法。但是,它依赖于从头文件(ext2fs / ext2_fs.h)复制常量定义,所以它很脆弱。一个更永久的解决方案需要编写一些C或类似Cython的东西。
同时,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