在一个破碎的符号链接

时间:2016-01-14 00:23:58

标签: python linux macos posix symlink

显然没有像os.lutime那样允许更改符号链接本身的mtime,即使它指向的文件不存在也是如此。为此,在Linux和OSX上,touch命令具有-h选项,不取消引用链接。但我发现没有办法在Python中本地跨平台(至少在OSX和Linux上)。那么我的愿望是否有补救措施? ;)

1 个答案:

答案 0 :(得分:0)

虽然不容易跨平台,但可以使用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))