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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 14:47:39