如何让Python函数同时支持命令行调用与脚本内调用?
让Python函数同时支持脚本调用与命令行调用
方法一:使用标准库argparse(无需额外依赖)
核心思路是把业务逻辑封装成普通函数,仅在脚本直接运行时触发命令行解析逻辑,不影响函数在其他脚本中的调用体验。
步骤1:编写核心业务函数
先实现带类型提示的标准Python函数,保证IDE能提供自动补全和语法提示:
def send_email(to: str, cc: str, subject: str, body: str) -> None: """发送邮件的核心逻辑 Args: to: 收件人邮箱 cc: 抄送人邮箱 subject: 邮件主题 body: 邮件正文 """ # 此处替换为实际发送邮件的代码 print(f"发送邮件到: {to}, 抄送: {cc}, 主题: {subject}")
步骤2:添加命令行解析逻辑
在脚本末尾加入argparse代码,通过if __name__ == "__main__"判断执行场景:
import argparse if __name__ == "__main__": parser = argparse.ArgumentParser(description="发送邮件工具") # 定义与函数参数对应的命令行参数 parser.add_argument("-to", required=True, help="收件人邮箱") parser.add_argument("-cc", required=True, help="抄送人邮箱") parser.add_argument("-subject", required=True, help="邮件主题") parser.add_argument("-body", required=True, help="邮件正文") args = parser.parse_args() # 调用核心函数 send_email(to=args.to, cc=args.cc, subject=args.subject, body=args.body)
使用方式
- 脚本内调用:像普通函数一样直接调用,支持IDE自动补全:
send_email("bobjones@gmail.com", "me@gmail.com", "My subject", "This is what I have to say.") - 命令行调用:
python your_script.py -to bobjones@gmail.com -cc me@gmail.com -subject "My subject" -body "This is what I have to say."
方法二:使用第三方库click(更简洁优雅)
如果允许安装第三方依赖,click能大幅简化代码,同时自动生成完善的帮助文档和参数校验,体验更接近PowerShell函数。
步骤1:安装click
pip install click
步骤2:编写函数
用click装饰器直接修饰函数,同时保留类型提示:
import click @click.command() @click.option("-to", required=True, help="收件人邮箱") @click.option("-cc", required=True, help="抄送人邮箱") @click.option("-subject", required=True, help="邮件主题") @click.option("-body", required=True, help="邮件正文") def send_email(to: str, cc: str, subject: str, body: str) -> None: """发送邮件的工具""" # 核心业务逻辑 print(f"发送邮件到: {to}, 抄送: {cc}, 主题: {subject}") if __name__ == "__main__": send_email()
使用方式
- 脚本内调用:直接通过关键字参数调用,支持IDE补全:
send_email(to="bobjones@gmail.com", cc="me@gmail.com", subject="My subject", body="This is what I have to say.") - 命令行调用:
python your_script.py -to bobjones@gmail.com -cc me@gmail.com -subject "My subject" -body "This is what I have to say." - 查看帮助:自动生成规范的帮助文档,类似PowerShell的
Get-Help:python your_script.py --help
注意事项
- 两种方式都保留了函数的原生调用特性,IDE的自动补全和类型提示不受影响。
- 标准库方式无额外依赖,适合环境受限场景;
click方式代码更简洁,功能更丰富(如参数校验、自动帮助文档)。
内容的提问来源于stack exchange,提问作者hmartin
相关产品推荐
相关产品推荐

