mailcap --- Mailcap 文件处�¶
æº�代ç �: Lib/mailcap.py
从 3.11 版起ä¸�建议使用,将在 3.13 版ä¸ç§»é™¤: mailcap 模å�—已被弃用(请å�‚阅 PEP 594 了解详情)。 mimetypes 模å�—æ��供了一个替代å“�。
Mailcap 文件å�¯ç”¨æ�¥é…�置支æŒ� MIME 的应用程åº�例如邮件阅读器和 Web æµ�览器如何å“�应具有ä¸�å�Œ MIME 类型的文件。 ("mailcap" 这个å��ç§°æº�自çŸè¯ "mail capability"。) 例如,一个 mailcap 文件å�¯èƒ½åŒ…å�« video/mpeg; xmpeg %s è¿™æ ·çš„è¡Œã€‚ ç„¶å�Žï¼Œå¦‚果用户é�‡åˆ° MIME 类型为 video/mpeg 的邮件消æ�¯æˆ– Web 文档时,%s 将被替æ�¢ä¸ºä¸€ä¸ªæ–‡ä»¶å�� (通常属于临时文件) 并且会自动å�¯åЍ xmpeg 程åº�æ�¥æŸ¥çœ‹è¯¥æ–‡ä»¶ã€‚
mailcap æ ¼å¼�的说明文档è§� RFC 1524, "A User Agent Configuration Mechanism For Multimedia Mail Format Information",但它并ä¸�是一个互è�”ç½‘æ ‡å‡†ã€‚ ä¸�过,mailcap 文件在大多数 Unix 系统上都å�—到支æŒ�。
- mailcap.findmatch(caps, MIMEtype, key='view', filename='/dev/null', plist=[])¶
返回一个 2 元组;其ä¸ç¬¬ä¸€ä¸ªå…ƒç´ 是包å�«æ‰€è¦�执行命令的å—符串 (它å�¯è¢«ä¼ 递给
os.system())ï¼Œç¬¬äºŒä¸ªå…ƒç´ æ˜¯å¯¹åº”äºŽç»™å®š MIME 类型的 mailcap æ�¡ç›®ã€‚ 如果找ä¸�到匹é…�çš„ MIME 类型,则将返回(None, None)。key æ˜¯æ‰€éœ€å—æ®µçš„å��称,它代表è¦�执行的活动类型;默认值是 'view'ï¼Œå› ä¸ºåœ¨æœ€é€šå¸¸çš„æƒ…å†µä¸‹ä½ å�ªæ˜¯æƒ³è¦�查看 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 文件ä¸ï¼Œå�¯ä»¥æŒ‡å®šå�¯é€‰çš„ "test" å—æ®µæ�¥æ£€æµ‹æŸ�些外部æ�¡ä»¶ï¼ˆä¾‹å¦‚所使用的机器架构或窗å�£ç³»ç»Ÿï¼‰æ�¥ç¡®å®šæ˜¯å�¦è¦�应用 mailcap 行。
findmatch()将自动检查æ¤ç±»æ�¡ä»¶å¹¶åœ¨æ£€æŸ¥æœªé€šè¿‡æ—¶è·³è¿‡æ�¡ç›®ã€‚在 3.11 版本å�‘生å�˜æ›´: 为了防æ¢ä½¿ç”¨ shell å…ƒå—符(在 shell 命令行ä¸å…·æœ‰ç‰¹æ®Šæ•ˆæžœçš„符å�·ï¼‰çš„安全问题,
findmatch会拒ç»�æŠŠå—æ¯�æ•°å—å’Œ@+=:,./-_以外的 ASCII å—符注入被返回的命令行。如果有ä¸�被å…�许的å—符出现在 filename ä¸ï¼Œ
findmatch将总是返回(None, None)就如å�Œæœªæ‰¾åˆ°ä»»ä½•æ�¡ç›®ä¸€æ ·ã€‚ å¦‚æžœè¿™æ ·çš„å—符出现在其他地方(在 plist 或 MIMEtype ä¸çš„值,findmatch将忽略所有使用这些值的 mailcap æ�¡ç›®ã€‚ 在两ç§�情况下都将引å�‘è¦å‘Šã€‚
- 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'})