Python文件复制删除原始文件

时间:2015-10-08 13:14:59

标签: python linux

我有下面的程序通过cron运行并备份星号通话记录。

它在大多数情况下工作正常,但是如果当时正在进行呼叫,那么尝试复制它的行为似乎会将其杀死,即它从源和目的地都消失。

有没有办法阻止这种情况,即我可以在尝试复制文件之前以某种方式测试文件是否正在使用?

由于

from datetime import datetime
from glob import iglob
from os.path import basename, dirname, isdir
from os import makedirs
from sys import argv
from shutil import copyfile


def copy_asterisk_files_tree(src, fullpath=None):
DEST = datetime.now().strftime('/mnt/shardik/asteriskcalls/' + src)

if fullpath is None:
    fullpath = src

if not isdir(DEST):
    makedirs(DEST)

for path in iglob(src + '/*'):
    if isdir(path):
        copy_asterisk_files_tree(path, fullpath)
    else:
        subdir = '%s/%s' % (
            DEST, dirname(path)[len(fullpath) + 1:]
        )
        if not isdir(subdir):
            makedirs(subdir)
        copyfile(path, '%s/%s' % (
            subdir, basename(path).replace(':', '-')
        ))

if __name__ == '__main__':
if len(argv) != 2:
    print 'You must specify the source path as the first argument!'
    exit(1)
copy_asterisk_files_tree(argv[1])

1 个答案:

答案 0 :(得分:1)

您需要做的就是使用锁。看看文档...

https://docs.python.org/2/library/fcntl.html#fcntl.flock

fcntl.flock(fd, op)

Perform the lock operation op on file descriptor fd (file objects
providing a fileno() method are accepted as well). See the Unix manual
flock(2) for details. (On some systems, this function is emulated 
using fcntl().)

在之前的问题中也已对此进行了回答,例如:Locking a file in Python,使用filelockhttps://pypi.python.org/pypi/filelock/)。 Filelock是独立于平台的。

你也可以写一个临时文件并合并它们,但我更喜欢