Функция копирования файлов не будет работать в функции таймера - PullRequest
0 голосов
/ 17 мая 2019

Я хочу создать функцию для копирования каждого файла в данном каталоге в течение заданного количества секунд.У меня есть функция копирования файлов, которая работает, и функция таймера, которая останавливает сценарий через определенное количество секунд.Тем не менее, я могу заставить любого работать, и не то, что я хотел.Моя последняя попытка привела меня к тому, что я поместил функцию копирования файлов в функцию таймера, которая позволяет таймеру работать должным образом, но функция копирования файлов не будет работать.

#------------------------------------------------------
# Treading classes
class RepeatedTimer(object):
    def __init__(self, interval, function, *args, **kwargs):
        self._timer     = None
        self.interval   = interval
        self.function   = function
        self.args       = args
        self.kwargs     = kwargs
        self.is_running = False
        self.start()

    def _run(self):
        self.is_running = False
        self.start()
        self.function(*self.args, **self.kwargs)

    def start(self):
        if not self.is_running:
            self._timer = Timer(self.interval, self._run)
            self._timer.start()
            self.is_running = True

    def stop(self):
        self._timer.cancel()
        self.is_running = False

#----------------------------------------------------
# Copying files


def hello(name):
    print ("copying %s!" % name)
src = #path
dest = #dest_path
print ("starting...")
rt = RepeatedTimer(1, hello, "files") # it auto-starts, no need of rt.start()
try:
    sleep(time1)
    def recursive_copy(src, dest):

        for item in os.listdir(src):
            file_path = os.path.join(src, item)

            # if item is a file, copy it
            if file_path.endswith('.txt') or file_path.endswith('.pdf') or file_path.endswith('.csv') or file_path.endswith('.pptx') or file_path.endswith('.xlsx') or file_path.endswith('.docx') or file_path.endswith('.ppt') or file_path.endswith('.xls') or file_path.endswith('.html') or file_path.endswith('.doc') or file_path.endswith('.html') or file_path.endswith('.doc'):

            #if os.path.isfile(file_path):
                shutil.copy(file_path, dest)

            # else if item is a folder, recurse 
            elif os.path.isdir(file_path):
                new_dest = os.path.join(dest, item)
                os.mkdir(new_dest)
                recursive_copy(file_path, new_dest)
finally:
    rt.stop() # better in a try/finally block to make sure the program ends!
...