Запускаем сценарий

zapuskaem scenarij Законченные системные программы

Так как мы уже изучали инструменты обхода деревьев, задействованные в этом сценарии, перейдем прямо к некоторым примерам его использования. При обработке идентичных деревьев во время обхода выводятся сообщения о состоянии, а в конце появляется сообщение: «No diffs found» (Расхождений не обнаружено):

C:\\PP4E\System\Filetools> diffall.py C:\temp\PP3E\Examples copytemp > diffs.txt

C:\\PP4E\System\Filetools> type diffs.txt | more

Comparing C:\temp\PP3E\Examples to copytemp

Directory lists are identical

Comparing contents

README-root.txt matches

Comparing C:\temp\PP3E\Examples\PP3E to copytemp\PP3E

Directory lists are identical

Comparing contents

echoEnvironment.pyw matches

LaunchBrowser.pyw matches

Launcher.py matches

Launcher.pyc matches

более 2000 строк опущено

Comparing C:\temp\PP3E\Examples\PP3E\TempParts to copytemp\PP3E\TempParts

Directory lists are identical

Comparing contents

109_0237.JPG matches

lawnlake1-jan-03.jpg matches

part-001.txt matches

part-002.html matches

No diffs found.

При использовании этого сценария я обычно устанавливаю флаг verbose в значение True и перенаправляю вывод в файл (для больших деревьев выводится слишком много информации, которую трудно воспринимать в процессе выполнения сценария). Чтобы ограничить количество сообщений, устанавливайте флаг verbose в значение False. Чтобы посмотреть, как выглядит отчет о расхождениях, нужно их создать. Для простоты я вручную изменил несколько файлов в одном из деревьев, но вы можете воспользоваться сценарием глобального поиска и замены, представленным выше в этой главе. Заодно удалим несколько файлов, чтобы в процессе поиска можно было обнаружить уникальные элементы. Последние две команды удаления из приведенных ниже воздействуют на один и тот же каталог в разных деревьях:

C:\\PP4E\System\Filetools> notepad copytemp\PP3E\README-PP3E.txt

C:\\PP4E\System\Filetools> notepad copytemp\PP3E\System\Filetools\commands.py C:\\PP4E\System\Filetools> notepad C:\temp\PP3E\Examples\PP3E\__init__.py

C:\\PP4E\System\Filetools> del copytemp\PP3E\System\Filetools\cpall_visitor.py C:\\PP4E\System\Filetools> del copytemp\PP3E\Launcher.py

C:\\PP4E\System\Filetools> del C:\temp\PP3E\Examples\PP3E\PyGadgets.py

Теперь перезапустим сценарий сравнения, чтобы обнаружить различия, и перенаправим вывод в файл, чтобы облегчить просмотр результатов. Ниже приведена лишь часть выходного отчета, в которой сообщается о различиях. При обычном использовании я сначала смотрю на сводку в конце отчета, а затем ищу в тексте отчета строки «DIFF» и «unique», если мне нужна дополнительная информация об отличиях, указанных в сводке, — конечно, этот интерфейс можно было бы сделать более дружественным, но мне вполне хватает и этого:

C:\\PP4E\System\Filetools> diffall.py C:\temp\PP3E\Examples

copytemp > diff2.txt

C:\\PP4E\System\Filetools> notepad diff2.txt

Comparing C:\temp\PP3E\Examples to copytemp

Directory lists are identical

Comparing contents

README-root.txt matches

Comparing C:\temp\PP3E\Examples\PP3E to copytemp\PP3E

Files unique to C:\temp\PP3E\Examples\PP3E

Launcher.py

Files unique to copytemp\PP3E

PyGadgets.py

Comparing contents

echoEnvironment.pyw matches

LaunchBrowser.pyw matches

Launcher.pyc matches

множество строк опущено

PyGadgets_bar.pyw matches

README-PP3E.txt DIFFERS

todos.py matches

tounix.py matches

__init__.py DIFFERS

__init__.pyc matches

Comparing C:\temp\PP3E\Examples\PP3E\System\Filetools to copytemp\PP3E\System\ Fil

Files unique to C:\temp\PP3E\Examples\PP3E\System\Filetools

cpall_visitor.py

Comparing contents

commands.py DIFFERS

cpall.py matches

…множество строк опущено…

Comparing C:\temp\PP3E\Examples\PP3E\TempParts to copytemp\PP3E\TempParts

Directory lists are identical

Comparing contents

109_0237.JPG matches

lawnlake1-jan-03.jpg matches

part-001.txt matches

part-002.html matches

Diffs found: 5

   unique files at C:\temp\PP3E\Examples\PP3E copytemp\PP3E

   files differ at C:\temp\PP3E\Examples\PP3E\README-PP3E.txt

copytemp\PP3E\README-PP3E.txt

  files differ at C:\temp\PP3E\Examples\PP3E\__init__.py — copytemp\PP3E\__init__.py

  unique files at C:\temp\PP3E\Examples\PP3E\System\Filetools — copytemp\PP3E\System\Filetools

— files differ at C:\temp\PP3E\Examples\PP3E\System\Filetools\commands.py — copytemp\PP3E\System\Filetools\commands.py

Я добавил разрывы строк и отступы кое-где, чтобы уместить листинг по ширине страницы, но отчет легко понять. В дереве, насчитывающем 1430 файлов и 185 каталогов, было найдено пять различий — три файла были изменены мною вручную, а два каталога мы рассогласовали тремя командами удаления.

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий