You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python邮件中Shell命令显示异常求助:通配符被展开问题

问题排查与解决

问题根源

邮件中*.PDF被展开为具体文件名,是因为**os.system调用shell时,shell自动对通配符*做了扩展解析**,把原命令里的*.PDF替换成了目录下的实际PDF文件列表,而非保留原格式。

解决方案

方案1:改用subprocess模块替代os.system

os.system会通过shell解析所有参数,而subprocess.run可以直接传递参数列表,避免shell对通配符的自动扩展:

import subprocess

# 读取邮件模板并替换变量
with open(mail_success_body, 'r') as file:
    data = file.read().replace('df1_html', df1_html)

# 用subprocess执行邮件脚本,参数按列表传递
subprocess.run(
    ['sh', mail_success_body_txt_file, arg2, data],
    check=True
)

方案2:对通配符进行转义

如果必须保留os.system,需要将命令中的*转义为\*,让shell识别为普通字符而非通配符:

# 转义HTML中的*,避免shell展开
df1_html_escaped = df1_html.replace('*', r'\*')

with open(mail_success_body, 'r') as file:
    data = file.read().replace('df1_html', df1_html_escaped)

# 继续使用os.system调用
os.system("""sh '%s' '%s' "%s" """ % (mail_success_body_txt_file, arg2, data))

额外注意

如果你的mail_success_body_txt_file脚本中直接将接收的data参数用于邮件内容输出,确保脚本里对参数的处理不会触发二次通配符扩展——比如避免用echo $3这类方式,改用echo "$3"(用双引号包裹参数)。

内容的提问来源于stack exchange,提问作者Arshiya Fathima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:54:13