Итак, я отлаживал это большую часть дня, и я бросаю полотенце.
Я пытаюсь создать систему, которая поможет автоматизировать возвращение рабочих папок на сервер после того, как мои ученики закончат с ними работу. На данный момент я все сделал - он правильно определяет соответствующую папку сервера и может переместить папку сервера в папку архива, чтобы временно создать ее резервную копию, пока я копирую новую работу обратно.
Тем не менее, это последний бит, который удерживает меня. Все работает прекрасно, пока я не перехожу к той части, где копирую папку, переданную в качестве аргумента, обратно на сервер.
Вот проблемный кусок кода:
print "Match Source: " + match_src
archive_folder_name = match_src.rsplit('/', 1)[1]
print "Archive Folder Name: " + archive_folder_name
if not (os.path.isdir(os.path.join(os.path.dirname(match_src), "Archive"))):
os.mkdir(os.path.join(os.path.dirname(match_src), "Archive"))
archive_dst = os.path.join(os.path.join(os.path.dirname(match_src), "Archive"), archive_folder_name)
print "Archived Folder Destination: " + archive_dst
# okay, archive folder has been made. Now we need to move the old
# stuff to this folder.
shutil.move(match_src, archive_dst)
# okay, archive folder is filled. Now to move the new stuff there
print "Updated Source: " + updated_folder_path
print "Destination: " + os.path.dirname(match_src)
shutil.move(updated_folder_path, os.path.dirname(match_src))
А вот вывод этих операторов печати и код ошибки:
ServerReturn mwl36$ python serverreturn_main.py /Users/mwl36/Desktop/Week\ 1
I'm on a Mac.
Path: /Users/mwl36/Desktop/Week 1
Folder: Week 1
Match Source: /Volumes/GCPSX Mac HD/ID/Marisa/Work for Student Workers/201315/SERVERTEST/Week 1
Archive Folder Name: Week 1
Archived Folder Destination: /Volumes/GCPSX Mac HD/ID/Marisa/Work for Student Workers/201315/SERVERTEST/Archive/Week 1
Updated Source: /Users/mwl36/Desktop/Week 1
Destination: /Volumes/GCPSX Mac HD/ID/Marisa/Work for Student Workers/201315/SERVERTEST
Traceback (most recent call last):
File "serverreturn_main.py", line 124, in <module>
main()
File "serverreturn_main.py", line 117, in main
shutil.move(updated_folder_path, os.path.dirname(match_src))
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 296, in move
copytree(src, real_dst, symlinks=True)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 206, in copytree
raise Error, errors
shutil.Error: [('/Users/mwl36/Desktop/Week 1/testfile.txt', '/Volumes/GCPSX Mac HD/ID/Marisa/Work for Student Workers/201315/SERVERTEST/Week 1/testfile.txt', "[Errno 22] Invalid argument: '/Volumes/GCPSX Mac HD/ID/Marisa/Work for Student Workers/201315/SERVERTEST/Week 1/testfile.txt'")]
Где я ошибаюсь? Если вызов do shutdown.move(src, dst) сработал в первый раз без проблем, почему здесь он рвет? Я пытался добавить задержку после первоначального вызова, но безрезультатно.
РЕДАКТИРОВАТЬ: Что еще более странно, так это то, что он действительно выполнит перемещение, но, похоже, никогда не удалит старую папку на рабочем столе. По сути, он копирует папку в папку DST, но не очищает ее после себя.
РЕДАКТИРОВАТЬ № 2: Вызов os.listdir показывает, что каталог исчез, и что единственное, что там было до второго вызова перемещения, - это «Архив». Я проверю copy() завтра, когда буду на работе, и у меня снова будет доступ к коду.
shutil.move
принимать аргумент с пробелом? Другими словами, не должно ли это привести к ошибке в следующем:/Volumes/GCPSX Mac HD/...
, потому что это похоже на три аргумента? - person erewok   schedule 04.09.2013shutil.copy
, следует избегать этого, поскольку он исключает метаданные. Если вам нужны метаданные, вам придется выполнить отладку, как указано ниже. Еслиshutil.move
все еще не работает, вы можете использоватьshutil.copy2
, который будет включать данные копистата. Однако, если ошибка связана с копистатом, я считаю, что это все равно не удастся. - person Benjooster   schedule 05.09.2013os.path.dirname
? Вы должны получить сообщение об ошибке, что каталог уже существует, но вы не получаете эту ошибку при первом перемещении, и ясно, что папка Week 1 уже существует в папке архива. - person Benjooster   schedule 05.09.2013