显然没有像 os.lutime
这样允许更改符号链接(symbolic link)本身的 mtime
的东西,即使它指向的文件不存在。为此,在 Linux 和 OSX 上,touch
命令具有 -h
选项以不取消引用链接。但是我发现没有办法在 Python 中原生跨平台(至少在 OSX 和 Linux 上)。那么我的愿望有没有补救的办法呢? ;)
最佳答案
虽然跨平台并不容易,但可以使用 ctypes
模块调用本地函数来做到这一点。
这是我为在 macOS 上执行此操作而创建的 Python 2 代码。我想通过一些调整它也可以在 Linux 上运行。
import ctypes
import ctypes.util
class ctype_timeval(ctypes.Structure):
_fields_ = [
('tv_sec', ctypes.c_long),
('tv_usec', ctypes.c_long)
]
ctype_libsystemc = ctypes.cdll.LoadLibrary(ctypes.util.find_library('libsystem.c'))
ctype_libsystemc_lutimes = ctype_libsystemc.lutimes
ctype_libsystemc_lutimes.restype = ctypes.c_int
ctype_libsystemc_lutimes.argtypes = [ctypes.c_char_p, ctype_timeval * 2]
def lutime(filename, time):
times = (ctype_timeval * 2)()
# access:
times[0].tv_sec = time[0]
times[0].tv_usec = 0
# modification:
times[1].tv_sec = time[1]
times[1].tv_usec = 0
return ctype_libsystemc_lutimes(filename, times)
你可以像os.utime
一样使用它:
lutime('file-or-symlink', (1488079452, 1488079452))
关于python - 在损坏的符号链接(symbolic link)的 Python 中更改 mtime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34779587/