shutil
— Файловые операции высокого уровня¶
Исходный код: Lib/shutil.py.
Модуль shutil
предлагает ряд высокоуровневых операций над файлами и коллекциями файлов. В частности, предоставляются функции, поддерживающие копирование и удаление файлов. Для операций над отдельными файлами см. также модуль os
.
Предупреждение
Даже функции копирования файлов более высокого уровня (shutil.copy()
, shutil.copy2()
) не могут скопировать все метаданные файла.
На платформах POSIX это означает, что владелец и группа файла теряются, а также ACL. В Mac OS вилка ресурсов и другие метаданные не используются. Это означает, что ресурсы будут потеряны, а коды типа и создателя файла будут неверными. В Windows владельцы файлов, ACL и альтернативные потоки данных не копируются.
Операции с каталогами и файлами¶
-
shutil.
copyfileobj
(fsrc, fdst[, length])¶ Копирует содержимое файлоподобного объекта fsrc в файлоподобный объект fdst. Целое число length, если задано, является размером буфера. В частности, отрицательное значение length означает копирование данных без циклического просмотра исходных данных по кускам; по умолчанию данные считываются по кускам, чтобы избежать неконтролируемого потребления памяти. Обратите внимание, что если текущая позиция файла объекта fsrc не равна 0, будет скопировано только содержимое от текущей позиции файла до конца файла.
-
shutil.
copyfile
(src, dst, *, follow_symlinks=True)¶ Скопировать содержимое (без метаданных) файла с именем src в файл с именем dst и вернуть dst наиболее эффективным способом. src и dst - это объекты типа path или имена путей, заданные в виде строк.
dst должно быть полным именем целевого файла; смотрите
copy()
для копии, которая принимает путь к целевому каталогу. Если src и dst указывают один и тот же файл, выдается сообщениеSameFileError
.Место назначения должно быть доступно для записи; в противном случае будет вызвано исключение
OSError
. Если dst уже существует, он будет заменен. Специальные файлы, такие как символьные или блочные устройства и трубы, не могут быть скопированы с помощью этой функции.Если follow_symlinks равно false и src является символической ссылкой, то вместо копирования файла, на который указывает src, будет создана новая символическая ссылка.
Вызывает auditing event
shutil.copyfile
с аргументамиsrc
,dst
.Изменено в версии 3.3:
IOError
раньше поднималось вместоOSError
. Добавлен аргумент follow_symlinks. Теперь возвращает dst.Изменено в версии 3.4: Вызывать
SameFileError
вместоError
. Поскольку первый класс является подклассом второго, это изменение обратно совместимо.Изменено в версии 3.8: Для более эффективного копирования файла могут использоваться специфические для платформы системные вызовы fast-copy. См. раздел Эффективные операции копирования в зависимости от платформы.
-
exception
shutil.
SameFileError
¶ Это исключение возникает, если источник и пункт назначения в
copyfile()
являются одним и тем же файлом.Добавлено в версии 3.4.
-
shutil.
copymode
(src, dst, *, follow_symlinks=True)¶ Скопируйте биты разрешения из src в dst. Содержимое файла, владелец и группа не затрагиваются. src и dst - это объекты типа path или имена путей, заданные в виде строк. Если follow_symlinks равно false, и src и dst являются символическими ссылками,
copymode()
попытается изменить режим самого dst (а не файла, на который он указывает). Эта функция доступна не на всех платформах; пожалуйста, обратитесь кcopystat()
за дополнительной информацией. Еслиcopymode()
не может модифицировать символические ссылки на локальной платформе, а его попросят это сделать, он ничего не сделает и вернется.Вызывает auditing event
shutil.copymode
с аргументамиsrc
,dst
.Изменено в версии 3.3: Добавлен аргумент follow_symlinks.
-
shutil.
copystat
(src, dst, *, follow_symlinks=True)¶ Скопируйте биты разрешения, время последнего доступа, время последней модификации и флаги из src в dst. В Linux,
copystat()
также копирует «расширенные атрибуты», где это возможно. Содержимое файла, владелец и группа не затрагиваются. src и dst - это объекты типа path или имена путей, заданные в виде строк.Если follow_symlinks равно false, а src и dst оба ссылаются на символические ссылки,
copystat()
будет работать с самими символическими ссылками, а не с файлами, на которые ссылаются символические ссылки - считывать информацию с символической ссылки src и записывать информацию в символическую ссылку dst.Примечание
Не все платформы предоставляют возможность исследовать и изменять символические ссылки. Python сам может подсказать вам, какая функциональность доступна локально.
Если
os.chmod in os.supports_follow_symlinks
равноTrue
,copystat()
может изменять биты разрешения символической ссылки.Если
os.utime in os.supports_follow_symlinks
равноTrue
,copystat()
может изменить время последнего доступа и модификации символической ссылки.Если
os.chflags in os.supports_follow_symlinks
равноTrue
,copystat()
может изменять флаги символической ссылки. (os.chflags
доступен не на всех платформах).
На платформах, где некоторые или все эти функции недоступны, когда вас просят изменить символическую ссылку,
copystat()
скопирует все, что сможет.copystat()
никогда не возвращает ошибку.Для получения дополнительной информации см. раздел
os.supports_follow_symlinks
.Вызывает auditing event
shutil.copystat
с аргументамиsrc
,dst
.Изменено в версии 3.3: Добавлен аргумент follow_symlinks и поддержка расширенных атрибутов Linux.
-
shutil.
copy
(src, dst, *, follow_symlinks=True)¶ Копирует файл src в файл или каталог dst. src и dst должны быть path-like objects или строками. Если dst указывает каталог, файл будет скопирован в dst с использованием базового имени файла из src. Если dst указывает уже существующий файл, он будет заменен. Возвращает путь к вновь созданному файлу.
Если follow_symlinks равно false, а src является символической ссылкой, dst будет создан как символическая ссылка. Если follow_symlinks равно true и src является символической ссылкой, dst будет копией файла, на который ссылается src.
copy()
копирует данные файла и режим разрешения файла (см.os.chmod()
). Другие метаданные, такие как время создания и модификации файла, не сохраняются. Чтобы сохранить все метаданные файла из оригинала, используйте вместо этого командуcopy2()
.Вызывает auditing event
shutil.copyfile
с аргументамиsrc
,dst
.Вызывает auditing event
shutil.copymode
с аргументамиsrc
,dst
.Изменено в версии 3.3: Добавлен аргумент follow_symlinks. Теперь возвращает путь к вновь созданному файлу.
Изменено в версии 3.8: Для более эффективного копирования файла могут использоваться специфические для платформы системные вызовы fast-copy. См. раздел Эффективные операции копирования в зависимости от платформы.
-
shutil.
copy2
(src, dst, *, follow_symlinks=True)¶ Идентично
copy()
, за исключением того, чтоcopy2()
также пытается сохранить метаданные файла.Когда follow_symlinks равно false, а src является символической ссылкой,
copy2()
пытается скопировать все метаданные из символической ссылки src во вновь созданную символическую ссылку dst. Однако эта функциональность доступна не на всех платформах. На платформах, где часть или вся эта функциональность недоступна,copy2()
сохранит все метаданные, какие сможет;copy2()
никогда не вызовет исключение, поскольку не может сохранить метаданные файла.copy2()
используетcopystat()
для копирования метаданных файла. Дополнительные сведения о поддержке платформы для изменения метаданных символической ссылки см. вcopystat()
.Вызывает auditing event
shutil.copyfile
с аргументамиsrc
,dst
.Вызывает auditing event
shutil.copystat
с аргументамиsrc
,dst
.Изменено в версии 3.3: Добавлен аргумент follow_symlinks, попытка копирования расширенных атрибутов файловой системы (пока только для Linux). Теперь возвращает путь к вновь созданному файлу.
Изменено в версии 3.8: Для более эффективного копирования файла могут использоваться специфические для платформы системные вызовы fast-copy. См. раздел Эффективные операции копирования в зависимости от платформы.
-
shutil.
ignore_patterns
(*patterns)¶ Эта фабричная функция создает функцию, которая может быть использована в качестве вызываемой для аргумента ignore в
copytree()
, игнорируя файлы и каталоги, которые соответствуют одному из предоставленных шаблонов в стиле glob. Смотрите пример ниже.
-
shutil.
copytree
(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False)¶ Рекурсивно скопировать все дерево каталогов с корнем в src в каталог с именем dst и вернуть конечный каталог. Все промежуточные каталоги, необходимые для содержания dst, также будут созданы по умолчанию.
Разрешения и время каталогов копируются с помощью
copystat()
, отдельные файлы копируются с помощьюcopy2()
.Если symlinks равно true, символические ссылки в исходном дереве будут представлены как символические ссылки в новом дереве, а метаданные исходных ссылок будут скопированы, насколько это позволяет платформа; если false или опущено, содержимое и метаданные связанных файлов будут скопированы в новое дерево.
Когда symlinks равен false, если файл, на который указывает симлинк, не существует, исключение будет добавлено в список ошибок, вызванных исключением
Error
в конце процесса копирования. Вы можете установить необязательный флаг ignore_dangling_symlinks в true, если хотите заглушить это исключение. Обратите внимание, что эта опция не имеет эффекта на платформах, не поддерживающихos.symlink()
.Если указано ignore, то это должна быть вызываемая переменная, которая в качестве аргументов получит каталог, посещаемый
copytree()
, и список его содержимого, возвращаемыйos.listdir()
. Посколькуcopytree()
вызывается рекурсивно, вызываемая переменная ignore будет вызываться один раз для каждого копируемого каталога. Вызываемая программа должна возвращать последовательность имен каталогов и файлов относительно текущего каталога (т.е. подмножество элементов второго аргумента); эти имена будут игнорироваться в процессе копирования.ignore_patterns()
можно использовать для создания такого вызываемого файла, который игнорирует имена, основанные на шаблонах в стиле glob.Если возникает исключение(я), то выдается сообщение
Error
со списком причин.Если указана copy_function, то это должна быть вызываемая функция, которая будет использоваться для копирования каждого файла. Она будет вызвана с исходным путем и путем назначения в качестве аргументов. По умолчанию используется
copy2()
, но можно использовать любую функцию, поддерживающую ту же сигнатуру (например,copy()
).Если dirs_exist_ok равно false (по умолчанию) и dst уже существует, будет выдано сообщение
FileExistsError
. Если dirs_exist_ok равно true, операция копирования будет продолжена, если она встретит существующие каталоги, а файлы в дереве dst будут перезаписаны соответствующими файлами из дерева src.Вызывает auditing event
shutil.copytree
с аргументамиsrc
,dst
.Изменено в версии 3.3: Копирование метаданных, когда symlinks равно false. Теперь возвращает dst.
Изменено в версии 3.2: Добавлен аргумент copy_function для возможности предоставления пользовательской функции копирования. Добавлен аргумент ignore_dangling_symlinks, чтобы исключить ошибки висячих симлинков, когда symlinks равен false.
Изменено в версии 3.8: Для более эффективного копирования файла могут использоваться специфические для платформы системные вызовы fast-copy. См. раздел Эффективные операции копирования в зависимости от платформы.
Добавлено в версии 3.8: Параметр dirs_exist_ok.
-
shutil.
rmtree
(path, ignore_errors=False, onerror=None)¶ Удалить все дерево каталогов; path должен указывать на каталог (но не символическую ссылку на каталог). Если ignore_errors равно true, ошибки, возникающие при неудачном удалении, будут игнорироваться; если false или опущено, такие ошибки обрабатываются вызовом обработчика, указанного onerror, или, если это опущено, они вызывают исключение.
Примечание
На платформах, поддерживающих необходимые функции на основе fd, по умолчанию используется версия
rmtree()
, устойчивая к атакам симлинков. На других платформах реализацияrmtree()
восприимчива к атаке симлинков: при подходящем времени и обстоятельствах злоумышленники могут манипулировать симлинками в файловой системе для удаления файлов, к которым они не могли бы получить доступ в противном случае. Приложения могут использовать атрибут функцииrmtree.avoids_symlink_attacks
, чтобы определить, какой случай применим.Если указано onerror, то это должна быть вызываемая функция, принимающая три параметра: функция, путь и excinfo.
Первый параметр, function, - это функция, вызвавшая исключение; он зависит от платформы и реализации. Второй параметр, path, будет именем пути, переданным в function. Третий параметр, excinfo, будет информацией об исключении, возвращаемой командой
sys.exc_info()
. Исключения, вызванные onerror, не будут перехвачены.Вызывает auditing event
shutil.rmtree
с аргументомpath
.Изменено в версии 3.3: Добавлена версия, устойчивая к атакам на симлинки, которая используется автоматически, если платформа поддерживает функции на основе fd.
Изменено в версии 3.8: В Windows больше не будет удаляться содержимое перекрестка каталогов перед удалением самого перекрестка.
-
shutil.
move
(src, dst, copy_function=copy2)¶ Рекурсивное перемещение файла или каталога (src) в другое место (dst) и возвращение места назначения.
Если местом назначения является существующий каталог, то src перемещается внутрь этого каталога. Если место назначения уже существует, но не является каталогом, оно может быть перезаписано в зависимости от семантики
os.rename()
.Если место назначения находится в текущей файловой системе, то используется
os.rename()
. В противном случае src копируется в dst с помощью copy_function и затем удаляется. В случае симлинков, новый симлинк, указывающий на цель src, будет создан в dst или как dst, а src будет удален.Если указана copy_function, она должна быть вызываемой, принимающей два аргумента src и dst, и будет использоваться для копирования src в dst, если
os.rename()
не может быть использована. Если источником является каталог, вызываетсяcopytree()
, передавая емуcopy_function()
. Функцией copy_function по умолчанию являетсяcopy2()
. Использованиеcopy()
в качестве функции копирования позволяет успешно выполнить перемещение, если невозможно скопировать метаданные, за счет отсутствия копирования метаданных.Вызывает auditing event
shutil.move
с аргументамиsrc
,dst
.Изменено в версии 3.3: Добавлена явная обработка симлинков для иностранных файловых систем, таким образом адаптируя ее к поведению GNU’s mv. Теперь возвращает dst.
Изменено в версии 3.5: Добавлен аргумент ключевого слова copy_function.
Изменено в версии 3.8: Для более эффективного копирования файла могут использоваться специфические для платформы системные вызовы fast-copy. См. раздел Эффективные операции копирования в зависимости от платформы.
Изменено в версии 3.9: Принимает path-like object как для src, так и для dst.
-
shutil.
disk_usage
(path)¶ Возвращает статистику использования диска по заданному пути в виде named tuple с атрибутами total, used и free, которые представляют собой объем общего, используемого и свободного пространства в байтах. path может быть файлом или каталогом.
Добавлено в версии 3.3.
Изменено в версии 3.8: В Windows path теперь может быть файлом или каталогом.
Availability: Unix, Windows.
-
shutil.
chown
(path, user=None, group=None)¶ Изменить владельца user и/или group данного пути.
user может быть именем пользователя системы или uid; то же самое относится к group. Требуется как минимум один аргумент.
См. также
os.chown()
, базовая функция.Вызывает auditing event
shutil.chown
с аргументамиpath
,user
,group
.Availability: Unix.
Добавлено в версии 3.3.
-
shutil.
which
(cmd, mode=os.F_OK | os.X_OK, path=None)¶ Возвращает путь к исполняемому файлу, который будет запущен при вызове заданного cmd. Если cmd не будет вызвано, возвращается
None
.mode - это маска разрешения, передаваемая в
os.access()
, по умолчанию определяющая, существует ли файл и является ли он исполняемым.Если путь не указан, используются результаты
os.environ()
, возвращающие либо значение «PATH», либо возвратos.defpath
.В Windows текущий каталог всегда добавляется к path, независимо от того, используете ли вы каталог по умолчанию или предоставляете свой собственный, что является поведением командной оболочки при поиске исполняемых файлов. Кроме того, при поиске cmd в пути проверяется переменная окружения
PATHEXT
. Например, если вы вызываетеshutil.which("python")
,which()
будет искатьPATHEXT
, чтобы знать, что ему следует искатьpython.exe
в каталогах path. Например, в Windows:>>> shutil.which("python") 'C:\\Python33\\python.EXE'
Добавлено в версии 3.3.
-
exception
shutil.
Error
¶ Это исключение собирает исключения, возникающие во время многофайловой операции. Для
copytree()
аргумент исключения представляет собой список из трех кортежей (srcname, dstname, exception).
Эффективные операции копирования в зависимости от платформы¶
Начиная с Python 3.8, все функции, связанные с копированием файла (copyfile()
, copy()
, copy2()
, copytree()
и move()
) могут использовать специфические для платформы системные вызовы «fast-copy» для более эффективного копирования файла (см. bpo-33671). «fast-copy» означает, что операция копирования происходит внутри ядра, избегая использования буферов пользовательского пространства в Python, как в «outfd.write(infd.read())
».
В macOS fcopyfile используется для копирования содержимого файла (не метаданных).
В Linux используется os.sendfile()
.
В Windows shutil.copyfile()
использует больший размер буфера по умолчанию (1 MiB вместо 64 KiB) и используется вариант memoryview()
, основанный на shutil.copyfileobj()
.
Если операция быстрого копирования завершилась неудачно и в файл назначения не было записано никаких данных, то shutil молча вернется к использованию менее эффективной внутренней функции copyfileobj()
.
Изменено в версии 3.8.
пример копитри¶
Пример, в котором используется помощник ignore_patterns()
:
from shutil import copytree, ignore_patterns
copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))
При этом будет скопировано все, кроме файлов .pyc
и файлов или каталогов, имя которых начинается с tmp
.
Другой пример, использующий аргумент ignore для добавления вызова логирования:
from shutil import copytree
import logging
def _logpath(path, names):
logging.info('Working in %s', path)
return [] # nothing will be ignored
copytree(source, destination, ignore=_logpath)
пример rmtree¶
В этом примере показано, как удалить дерево каталогов в Windows, где для некоторых файлов установлен бит «только для чтения». Он использует обратный вызов onerror, чтобы очистить бит readonly и повторить попытку удаления. Любой последующий сбой будет распространяться.
import os, stat
import shutil
def remove_readonly(func, path, _):
"Clear the readonly bit and reattempt the removal"
os.chmod(path, stat.S_IWRITE)
func(path)
shutil.rmtree(directory, onerror=remove_readonly)
Операции архивирования¶
Добавлено в версии 3.2.
Изменено в версии 3.5: Добавлена поддержка формата xztar.
Также предоставляются высокоуровневые утилиты для создания и чтения сжатых и архивных файлов. Они полагаются на модули zipfile
и tarfile
.
-
shutil.
make_archive
(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])¶ Создайте архивный файл (например, zip или tar) и верните его имя.
base_name - имя создаваемого файла, включая путь, без расширения, специфичного для формата. формат - формат архива: один из «zip» (если доступен модуль
zlib
), «tar», «gztar» (если доступен модульzlib
), «bztar» (если доступен модульbz2
) или «xztar» (если доступен модульlzma
).root_dir - это каталог, который будет корневым каталогом архива, все пути в архиве будут относительными к нему; например, мы обычно chdir в root_dir перед созданием архива.
base_dir - это каталог, из которого мы начинаем архивирование; т.е. base_dir будет общим префиксом всех файлов и каталогов в архиве. base_dir должен быть указан относительно root_dir. Как использовать base_dir и root_dir вместе, смотрите в Пример архивирования с использованием base_dir.
root_dir и base_dir по умолчанию соответствуют текущему каталогу.
Если dry_run равно true, архив не создается, но операции, которые были бы выполнены, записываются в logger.
owner и group используются при создании tar-архива. По умолчанию используется текущий владелец и группа.
logger должен быть объектом, совместимым с PEP 282, обычно экземпляром
logging.Logger
.Аргумент verbose не используется и устарел.
Поднимает auditing event
shutil.make_archive
с аргументамиbase_name
,format
,root_dir
,base_dir
.Примечание
Эта функция не является потокобезопасной, если используются пользовательские архиваторы, зарегистрированные в
register_archive_format()
. В этом случае она временно изменяет текущий рабочий каталог процесса для выполнения архивации.Изменено в версии 3.8: Современный формат pax (POSIX.1-2001) теперь используется вместо устаревшего формата GNU для архивов, созданных с помощью
format="tar"
.Изменено в версии 3.10.6: Теперь эта функция стала потокобезопасной при создании стандартных архивов
.zip
и tar.
-
shutil.
get_archive_formats
()¶ Возвращает список поддерживаемых форматов для архивирования. Каждый элемент возвращаемой последовательности представляет собой кортеж
(name, description)
.По умолчанию
shutil
предоставляет эти форматы:zip: ZIP-файл (если доступен модуль
zlib
).tar: Несжатый tar-файл. Использует формат POSIX.1-2001 pax для новых архивов.
gztar: gzip’ed tar-файл (если доступен модуль
zlib
).bztar: bzip2’ed tar-файл (если доступен модуль
bz2
).xztar: xz’ed tar-файл (если доступен модуль
lzma
).
Вы можете зарегистрировать новые форматы или предоставить свой собственный архиватор для любых существующих форматов, используя
register_archive_format()
.
-
shutil.
register_archive_format
(name, function[, extra_args[, description]])¶ Зарегистрируйте архиватор для формата name.
function - это вызываемая функция, которая будет использоваться для распаковки архивов. Вызываемая функция получает base_name файла для создания, затем base_dir (по умолчанию
os.curdir
) для начала архивирования. Дальнейшие аргументы передаются в виде ключевых слов: owner, group, dry_run и logger (как передано вmake_archive()
).Если задано, extra_args - это последовательность пар
(name, value)
, которые будут использоваться в качестве дополнительных аргументов ключевых слов при использовании вызываемого архиватора.description используется программой
get_archive_formats()
, которая возвращает список архиваторов. По умолчанию это пустая строка.
-
shutil.
unregister_archive_format
(name)¶ Удалить формат архива name из списка поддерживаемых форматов.
-
shutil.
unpack_archive
(filename[, extract_dir[, format]])¶ Распаковать архив. filename - полный путь к архиву.
extract_dir - имя целевого каталога, в который распаковывается архив. Если имя не указано, используется текущий рабочий каталог.
формат - формат архива: один из «zip», «tar», «gztar», «bztar» или «xztar». Или любой другой формат, зарегистрированный с помощью
register_unpack_format()
. Если не указано,unpack_archive()
будет использовать расширение имени файла архива и проверять, зарегистрирован ли распаковщик для этого расширения. Если таковой не найден, выдается сообщениеValueError
.Вызывает auditing event
shutil.unpack_archive
с аргументамиfilename
,extract_dir
,format
.Предупреждение
Никогда не извлекайте архивы из ненадежных источников без предварительной проверки. Возможно, что файлы создаются вне пути, указанного в аргументе extract_dir, например, члены, имеющие абсолютные имена файлов, начинающиеся с «/», или имена файлов с двумя точками «.».
Изменено в версии 3.7: Принимает path-like object для filename и extract_dir.
-
shutil.
register_unpack_format
(name, extensions, function[, extra_args[, description]])¶ Регистрирует формат распаковки. name - имя формата, а extensions - список расширений, соответствующих формату, например
.zip
для Zip-файлов.function - это вызываемая функция, которая будет использоваться для распаковки архивов. Вызываемая функция получает путь к архиву, а затем каталог, в который архив должен быть извлечен.
Если указано, extra_args - это последовательность кортежей
(name, value)
, которые будут переданы в качестве аргументов ключевых слов в вызываемую программу.Для описания формата может быть предоставлено description, которое будет возвращено функцией
get_unpack_formats()
.
-
shutil.
unregister_unpack_format
(name)¶ Снять с регистрации формат распаковки. name - имя формата.
-
shutil.
get_unpack_formats
()¶ Возвращает список всех зарегистрированных форматов для распаковки. Каждый элемент возвращаемой последовательности представляет собой кортеж
(name, extensions, description)
.По умолчанию
shutil
предоставляет эти форматы:zip: ZIP-файл (распаковка сжатых файлов работает только при наличии соответствующего модуля).
tar: несжатый tar-файл.
gztar: gzip’ed tar-файл (если доступен модуль
zlib
).bztar: bzip2’ed tar-файл (если доступен модуль
bz2
).xztar: xz’ed tar-файл (если доступен модуль
lzma
).
Вы можете зарегистрировать новые форматы или предоставить свой собственный распаковщик для любых существующих форматов, используя
register_unpack_format()
.
Пример архивирования¶
В этом примере мы создаем gzip’ed tar-архив, содержащий все файлы, найденные в каталоге .ssh
пользователя:
>>> from shutil import make_archive
>>> import os
>>> archive_name = os.path.expanduser(os.path.join('~', 'myarchive'))
>>> root_dir = os.path.expanduser(os.path.join('~', '.ssh'))
>>> make_archive(archive_name, 'gztar', root_dir)
'/Users/tarek/myarchive.tar.gz'
Полученный архив содержит:
$ tar -tzvf /Users/tarek/myarchive.tar.gz
drwx------ tarek/staff 0 2010-02-01 16:23:40 ./
-rw-r--r-- tarek/staff 609 2008-06-09 13:26:54 ./authorized_keys
-rwxr-xr-x tarek/staff 65 2008-06-09 13:26:54 ./config
-rwx------ tarek/staff 668 2008-06-09 13:26:54 ./id_dsa
-rwxr-xr-x tarek/staff 609 2008-06-09 13:26:54 ./id_dsa.pub
-rw------- tarek/staff 1675 2008-06-09 13:26:54 ./id_rsa
-rw-r--r-- tarek/staff 397 2008-06-09 13:26:54 ./id_rsa.pub
-rw-r--r-- tarek/staff 37192 2010-02-06 18:23:10 ./known_hosts
Пример архивирования с использованием base_dir¶
В этом примере, аналогичном one above, мы покажем, как использовать make_archive()
, но на этот раз с использованием base_dir. Теперь у нас есть следующая структура каталогов:
$ tree tmp
tmp
└── root
└── structure
├── content
└── please_add.txt
└── do_not_add.txt
В окончательный архив please_add.txt
должен быть включен, а do_not_add.txt
- нет. Поэтому мы используем следующее:
>>> from shutil import make_archive
>>> import os
>>> archive_name = os.path.expanduser(os.path.join('~', 'myarchive'))
>>> make_archive(
... archive_name,
... 'tar',
... root_dir='tmp/root',
... base_dir='structure/content',
... )
'/Users/tarek/my_archive.tar'
Перечисление файлов в полученном архиве дает нам:
$ python -m tarfile -l /Users/tarek/myarchive.tar
structure/content/
structure/content/please_add.txt
Запрос размера выходного терминала¶
-
shutil.
get_terminal_size
(fallback=(columns, lines))¶ Получение размера окна терминала.
Для каждого из двух измерений проверяется переменная окружения,
COLUMNS
иLINES
соответственно. Если переменная определена и ее значение является целым положительным числом, она используется.Когда
COLUMNS
илиLINES
не определены, что является обычным случаем, терминал, подключенный кsys.__stdout__
, запрашивается вызовомos.get_terminal_size()
.Если размер терминала не может быть успешно запрошен, либо потому что система не поддерживает запрос, либо потому что мы не подключены к терминалу, используется значение, указанное в параметре
fallback
. По умолчаниюfallback
принимает значение(80, 24)
, которое является размером по умолчанию, используемым многими эмуляторами терминалов.Возвращаемое значение представляет собой именованный кортеж типа
os.terminal_size
.См. также: Единая спецификация UNIX, версия 2, Other Environment Variables.
Добавлено в версии 3.3.