#python #automation #scheduled-tasks
Вопрос:
Я работаю над использованием планировщика задач для запуска этой программы каждое утро. Программа на python отлично работает, когда я запускаю ее вручную, но выдает файлообменник, когда закончу с планировщиком задач. Вот фрагмент кода:
original = "C:/Users/work/thing/thing.xlsx"
target = "C:/Users/{}/place of work/work Team -
Documents/General/thing".format(user)
if os.path.isfile(os.path.join(target, "thing.xlsx")):
os.remove(os.path.join(target, "thing.xlsx"))
shutil.move(original, target)
print("Program executed without errors.")
Комментарии:
1. Под какой учетной записью пользователя у вас настроен планировщик задач для выполнения этого? С какой учетной записью пользователя вы запускаете его при ручном тестировании?
2. Кстати, я был бы очень (чрезвычайно) удивлен, если бы это было характерно для
shutil.move
и не происходило также сos.rename
.3. Кроме того, вам не должно быть нужно
os.remove()
… и, если вам это не нужно, у вас не должно быть этого. Переименование файла в место назначения, которое перезаписывает существующий файл, является стандартным способом атомарного обновления этого файла («атомарное» означает, что либо оно завершится успешно, и вы получите новый файл, либо произойдет сбой, и у вас все еще будет старый файл). Когда вы добавляете явное удаление, вы теряете эту атомарность, потому что у вас может быть случай, когда удаление завершается успешно, но переименование завершается неудачно, поэтому в конечном итоге у вас вообще не будет файла в месте назначения.4. В любом случае-если это не проблема с правами доступа к файлам, то наиболее вероятный запасной вариант-это
user
значение, которое не соответствует вашим ожиданиям. (Например, если вы читаете имя пользователя из файла, возможно, вы забыли убрать новую строку в конце).5. @CharlesDuffy — административный пользователь, и это происходит только с операционной системой.переименовать
Ответ №1:
Исправлено путем преобразования скрипта python в исполняемый файл (через pyinstaller), а затем выполнения программы exe в качестве действия из планировщика задач. Некоторые отмеченные галочками свойства включают -«предоставить наивысшие разрешения», в которых я также устранил необходимость shutil.move()
, просто создав и записав файл в облачном хранилище.