Форум сайта python.su
Всем привет! Дочитал в книге “A byte of python” до пункта с задачками, первая задачка - Составить программу, которая создаёт резервные копии всех наших важных файлов. Короче она у меня вообще никак не хочет работать.
import os import time # 1. Файлы и каталоги, которые необходимо скопировать, собираются в список. source = ['"C:\\My Documents"', 'C:\\Code'] # Заметьте, что для имён, содержащих пробелы, необходимо использовать # двойные кавычки внутри строки. # 2. Резервные копии должны храниться в основном каталоге резерва. target_dir = 'E:\\Backup' # Подставьте ваш путь. # 3. Файлы помещаются в zip-архив. # 4. Именем для zip-архива служит текущая дата и время. target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip' # 5. Используем команду "zip" для помещения файлов в zip-архив zip_command = "zip -qr {0} {1}".format(target, ' '.join(source)) # Запускаем создание резервной копии if os.system(zip_command) == 0: print('Резервная копия успешно создана в', target) else: print('Создание резервной копии НЕ УДАЛОСЬ')
zip_command = "\"C:\\Program Files\\7-Zip\\7z.exe\" a -tzip -ssw -mx1 -r0 {0} {1}".format(target, ' '.join(source))
C:\Users\Denis\Desktop\python\venv\Scripts\python.exe CUsers/Denis/Desktop/python/backup_ver1.py
Создание резервной копии НЕ УДАЛОСЬ
“zip” �� ���� ����७��� ��� ���譥�
��������, �ᯮ��塞�� �ணࠬ��� ��� ������ 䠩���.
Process finished with exit code 0
Отредактировано IamDenis (Дек. 14, 2021 01:28:41)
Офлайн
IamDenisНу блин, вы собственную программу хоть как-нибудь то попытайтесь отдебажить. Вот такой вопрос, какое значение принимает переменная zip_command?
Помогите пожалуйста, что не так?
Офлайн
FishHook“Отдебажить” - Я так понимаю вы имеете ввиду нажать кнопку Debug? В PyCharm правая, верхняя кнопка рядом с кнопкой Run. Я нажимал её, а толку? Ничего нового для меня, нажатие этой кнопки не показало, только ошибку которая в самом низу поста.
Ну блин, вы собственную программу хоть как-нибудь то попытайтесь отдебажить
Офлайн
IamDenis
Да я знаю, что делает zip, я ж не об этом спрашиваю, и даже не о встроенном в ИДЕ дебаггере.
Я спросил, какое значение принимает переменная zip_command?
Вот вы написали программу, вы рассчитываете, что некая переменная получит некое значение. И вот ваша программа не работает. А! Кошмар! Что же делать?
Ну что делать, надо убедиться, что все ваши ожидания от программы соответствуют реальному положению дел. Я вас спросил, чему равна переменная. Не по вашим представлениям и мечтам, а на самом деле. И вы кажется не можете ответить на этот вопрос. Вот это и есть процесс отладки программы, вы должны шаг за шагом проследить за ходом выполнения программы и убедиться, что все происходит, как вы задумали. Не умеете пользоваться инструментами - не страшно. Но принтов то вы можете же напихать? Ну просто блин чтобы программа напечатала значение переменной.
Офлайн
Да, следуя книге, я добавил print(zip_command) прямо перед вызовом os.system и запустил
После этого скопировал выведенную команду «zip_command» и вставил её в командную строку, чтобы проверить, работает ли она корректно сама по себе, правда подозреваю, что я не правильно понял насчет командной строки, наверное надо было вызвать виндосовскую командную строку (Win + R) и туда ввести, а я её ввел в Терминал.
В общем, проблема уже решена, помогли на другом форуме
zip_command = "\"C:\\Program Files\\7-Zip\\7z.exe\" a -tzip -ssw -mx1 -r0 {0} {1}".format(target, ' '.join(source))
“zip” �� ���� ����७��� ��� ���譥�
��������, �ᯮ��塞�� �ணࠬ��� ��� ������ 䠩���.
Офлайн
IamDenis
В общем, проблема уже решена, помогли на другом форуме
source = ['"C:\\My Documents"', 'C:\\Code']
Офлайн
FishHookТак подожди, как это может быть проблемой, если так было в книге и присутствие двойных кавычек в первом случае объяснялось тем, что в пути к папке My Documents есть пробелы, а во втором пути пробелов нет, поэтому двойные кавычки там и не нужны. Чтобы все заработало мне нужно было указать прямой путь до исполняемого файла 7zip, после этого код заработал, ну были ещё ошибки с путями к папкам которые нужно было заархивировать, C:\\Code я заменил на C:\\Games и С:\\My Documents я пробовал прописывать и так C:\\Documents, но все равно появлялся Warning. Однако код работал и архивация выполнилась, только одной папки
Офлайн
IamDenis
Единственное, что хотелось бы ещё узнать, как избавиться от иероглифов и знаков вопросов в ошибках
“zip” �� ���� ����७��� ��� ���譥�
��������, �ᯮ��塞�� �ணࠬ��� ��� ������ 䠩���.
target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.tar' # 5. Используем команду "zip" для помещения файлов в zip-архив zip_command = "tar -c -f{0} {1}".format(target, ' '.join(source))
IamDenisЭти книги бывает сканируют или перепечатывают друг у друга по сто раз,а потом выкладывают в интернет.Новичку трудно осознать, что в книгах может быть всякая лажа.
как это может быть проблемой, если так было в книге
Офлайн
xam1816Ну так у меня Windows, windows 10. А разве не в командную строку винды отправляется значение переменной zip_command на выполнение архивации
Затем мы, наконец, выполняем команду при помощи функции os.system, которая запускает команду так, как будто она была запущена из системы, т.е. из
командной оболочки.
xam1816Возможно, но в данном случае это сомнительно потому что, в книге дается комментарий насчет использования двойных кавычек
Эти книги бывает сканируют или перепечатывают друг у друга по сто раз,а потом выкладывают в интернет
# 1. Файлы и каталоги, которые необходимо скопировать, собираются в список. source = ['"C:\\My Documents"', 'C:\\Code'] # Заметьте, что для имён, содержащих пробелы, необходимо использовать # двойные кавычки внутри строки.
xam1816Что подтверждает, что в книге про двойные кавычки, это не ошибка, не перепечатка и т.д.
Двойные кавычки в пути это в cmd windows нужно для названий с пробелами
Офлайн
FishHookЭто хорошо, это похвально и я не хотел тебя как - то задеть тем, что я пошел узнавать решение проблемы на другой форум, просто я сразу написал посты с просьбой о помощи на двух форумах, в надежде получить побыстрей ответ
Моя задача, и моих коллег здесь - научить тебя решать такие проблемы самостоятельно. С этой целью и были заданы все вопросы выше. Впрочем, как знаешь
Офлайн