mailcap
— Обработка файлов Mailcap¶
Исходный код: Lib/mailcap.py
Утратил актуальность с версии 3.11, будет удален в версии 3.13: Модуль mailcap
устарел (подробнее см. в разделе PEP 594). Модуль mimetypes
предоставляет альтернативу.
Файлы Mailcap используются для настройки того, как приложения, поддерживающие MIME, такие как программы для чтения почты и веб-браузеры, реагируют на файлы с различными типами MIME. (Название «mailcap» происходит от фразы «возможности работы с почтой»). Например, файл mailcap может содержать строку типа video/mpeg; xmpeg %s
. Затем, если пользователь столкнется с сообщением электронной почты или веб-документом с типом MIME video/mpeg, %s
, оно будет заменено именем файла (обычно относящимся к временному файлу), и программа xmpeg может быть автоматически запущена для просмотра файла.
Формат mailcap описан в RFC 1524, «Механизм настройки агента пользователя для информации о формате мультимедийной почты», но не является стандартом Интернета. Однако файлы mailcap поддерживаются в большинстве систем Unix.
- mailcap.findmatch(caps, MIMEtype, key='view', filename='/dev/null', plist=[])¶
Возвращает кортеж из 2 элементов; первый элемент - это строка, содержащая выполняемую командную строку (которая может быть передана в
os.system()
), а второй элемент - запись mailcap для данного MIME-типа. Если соответствующий MIME-тип не найден, возвращается(None, None)
.ключ - это название желаемого поля, которое представляет тип выполняемого действия; значение по умолчанию - «просмотр», поскольку в наиболее распространенном случае вы просто хотите просмотреть основную часть данных, введенных в формате MIME. Другими возможными значениями могут быть «compose» и «edit», если вы хотите создать новое тело с заданным типом MIME или изменить существующие данные тела. Полный список этих полей приведен в RFC 1524.
filename - это имя файла, которое должно быть заменено на
%s
в командной строке; значение по умолчанию -'/dev/null'
, что почти наверняка не то, что вам нужно, поэтому обычно вы заменяете его, указывая имя файла.plist может быть списком, содержащим именованные параметры; значением по умолчанию является просто пустой список. Каждая запись в списке должна быть строкой, содержащей имя параметра, знак равенства (
'='
), и значение параметра. Записи Mailcap могут содержать именованные параметры, такие как%{foo}
, которые будут заменены значением параметра с именем „foo“. Например, если командная строкаshowpartial %{id} %{number} %{total}
находится в файле mailcap, а для plist задано значение['id=1', 'number=2', 'total=3']
, результирующая командная строка будет иметь вид'showpartial 1 2 3'
.В файле mailcap необязательно может быть указано поле «тест» для проверки некоторых внешних условий (таких как архитектура компьютера или используемая оконная система), чтобы определить, применяется ли строка mailcap.
findmatch()
автоматически проверит такие условия и пропустит запись, если проверка завершится неудачей.Изменено в версии 3.11: Чтобы предотвратить проблемы с безопасностью, связанные с метасимволами оболочки (символами, которые имеют специальные эффекты в командной строке оболочки),
findmatch
не будет вводить символы ASCII, отличные от буквенно-цифровых символов и@+=:,./-_
, в возвращаемую командную строку.Если в filename появляется запрещенный символ,
findmatch
всегда возвращает(None, None)
, как если бы запись не была найдена. Если такой символ встречается в другом месте (значение в plist или MIMEtype),findmatch
), все записи mailcap, в которых используется это значение, будут проигнорированы. В любом случае будет заданwarning
.
- mailcap.getcaps()¶
Возвращает словарь, сопоставляющий MIME-типы со списком записей файла mailcap. Этот словарь должен быть передан функции
findmatch()
. Запись хранится в виде списка словарей, но не обязательно знать подробности этого представления.Эта информация получена из всех файлов mailcap, найденных в системе. Настройки в пользовательском файле mailcap
$HOME/.mailcap
будут переопределять настройки в системных файлах mailcap/etc/mailcap
,/usr/etc/mailcap
, и/usr/local/etc/mailcap
.
Пример использования:
>>> import mailcap
>>> d = mailcap.getcaps()
>>> mailcap.findmatch(d, 'video/mpeg', filename='tmp1223')
('xmpeg tmp1223', {'view': 'xmpeg %s'})