使用Python实现触摸?

问题:

 touch是一个Unix实用程序,用于将文件的修改和访问时间设置为当前时间。如果文件不存在,则使用默认权限创建。
你将如何实现它作为一个Python函数?尝试跨平台完成。
(目前Google的“python touch file”结果并不是很好,但指向os.utime

回答:

这试图比其他解决方案更无竞争力。 (Python 2.5中的with关键字是新的。)

import os
def touch(fname, times=None):
    with open(fname, 'a'):
        os.utime(fname, times)

大致相当于此。

import os
def touch(fname, times=None):
    fhandle = open(fname, 'a')
    try:
        os.utime(fname, times)
    finally:
        fhandle.close()

现在,为了真正使其无竞争,您需要使用futimes并更改打开的文件句柄的时间戳,而不是打开文件,然后更改文件名(可能已被重命名)的时间戳。不幸的是,Python似乎没有提供一种方法来调用futimes而不经过ctypes或类似的…
 编辑
Nate Parsons所述,Python 3.3将add specifying a file descriptor(当os.supports_fd)到诸如os.utime的函数时,它将使用futimes系统调用而不是utimes系统调用。换一种说法:

import os
def touch(fname, mode=0o666, dir_fd=None, **kwargs):
    flags = os.O_CREAT | os.O_APPEND
    with os.fdopen(os.open(fname, flags=flags, mode=mode, dir_fd=dir_fd)) as f:
        os.utime(f.fileno() if os.utime in os.supports_fd else fname,
            dir_fd=None if os.supports_fd else dir_fd, **kwargs)

 
 Code问答: codewenda.com
Stackoverflow:Implement touch using Python?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

1 + 7 =