mailcap --- Mailcap 文件處理?

源代碼: Lib/mailcap.py

Deprecated since version 3.11, will be removed in version 3.13: The mailcap module is deprecated (see PEP 594 for details). The mimetypes module provides an alternative.


Mailcap 文件可用來(lái)配置支持 MIME 的應用程序例如郵件閱讀器和 Web 瀏覽器如何響應具有不同 MIME 類(lèi)型的文件。 ("mailcap" 這個(gè)名稱(chēng)源自短語(yǔ) "mail capability"。) 例如,一個(gè) mailcap 文件可能包含 video/mpeg; xmpeg %s 這樣的行。 然后,如果用戶(hù)遇到 MIME 類(lèi)型為 video/mpeg 的郵件消息或 Web 文檔時(shí),%s 將被替換為一個(gè)文件名 (通常屬于臨時(shí)文件) 并且會(huì )自動(dòng)啟動(dòng) xmpeg 程序來(lái)查看該文件。

mailcap 格式的說(shuō)明文檔見(jiàn) RFC 1524, "A User Agent Configuration Mechanism For Multimedia Mail Format Information",但它并不是一個(gè)互聯(lián)網(wǎng)標準。 不過(guò),mailcap 文件在大多數 Unix 系統上都受到支持。

mailcap.findmatch(caps, MIMEtype, key='view', filename='/dev/null', plist=[])?

返回一個(gè) 2 元組;其中第一個(gè)元素是包含所要執行命令的字符串 (它可被傳遞給 os.system()),第二個(gè)元素是對應于給定 MIME 類(lèi)型的 mailcap 條目。 如果找不到匹配的 MIME 類(lèi)型,則將返回 (None, None)。

key 是所需字段的名稱(chēng),它代表要執行的活動(dòng)類(lèi)型;默認值是 'view',因為在最通常的情況下你只是想要查看 MIME 類(lèi)型數據的正文。 其他可能的值還有 'compose' 和 'edit',分別用于想要創(chuàng )建給定 MIME 類(lèi)型正文或修改現有正文數據的情況。 請參閱 RFC 1524 獲取這些字段的完整列表。

filename 是在命令行中用來(lái)替換 %s 的文件名;默認值 '/dev/null' 幾乎肯定不是你想要的,因此通常你要通過(guò)指定一個(gè)文件名來(lái)重載它。

plist 可以是一個(gè)包含命名形參的列表;默認值只是一個(gè)空列表。 列表中的每個(gè)條目必須為包含形參名稱(chēng)的字符串、等于號 ('=') 以及形參的值。 Mailcap 條目可以包含形如 %{foo} 的命名形參,它將由名為 'foo' 的形參的值所替換。 例如,如果命令行 showpartial %{id} %{number} %{total} 是在一個(gè) mailcap 文件中,并且 plist 被設為 ['id=1', 'number=2', 'total=3'],則結果命令行將為 'showpartial 1 2 3'。

在 mailcap 文件中,可以指定可選的 "test" 字段來(lái)檢測某些外部條件(例如所使用的機器架構或窗口系統)來(lái)確定是否要應用 mailcap 行。 findmatch() 將自動(dòng)檢查此類(lèi)條件并在檢查未通過(guò)時(shí)跳過(guò)條目。

mailcap.getcaps()?

返回一個(gè)將 MIME 類(lèi)型映射到 mailcap 文件條目列表的字典。 此字典必須被傳給 findmatch() 函數。 條目會(huì )被存儲為字典列表,但并不需要了解此表示形式的細節。

此信息來(lái)自在系統中找到的所有 mailcap 文件。 用戶(hù)的 mailcap 文件 $HOME/.mailcap 中的設置將覆蓋系統 mailcap 文件 /etc/mailcap, /usr/etc/mailcap/usr/local/etc/mailcap 中的設置。

一個(gè)用法示例:

>>>
>>> import mailcap
>>> d = mailcap.getcaps()
>>> mailcap.findmatch(d, 'video/mpeg', filename='tmp1223')
('xmpeg tmp1223', {'view': 'xmpeg %s'})