如何基于argparse命令行参数执行关联的特定函数?
使用argparse根据命令行参数触发对应函数
方法1:检查参数是否被设置(适合单参数触发场景)
这种方法适配你给出的示例场景:通过-s参数触发特定函数。核心逻辑是解析命令行参数后,判断哪个参数有传入值,再调用对应的函数。
代码示例:
import argparse # 定义功能函数 def scan_website(url): print(f"正在扫描网站: {url}") # 这里编写你的扫描业务逻辑 def other_function(param): print(f"执行其他功能,参数: {param}") if __name__ == "__main__": parser = argparse.ArgumentParser(description="根据命令行参数执行对应功能") # 添加参数,用dest指定属性名,方便后续判断 parser.add_argument("-s", "--scan", dest="scan_url", help="扫描指定网站") parser.add_argument("-o", "--other", dest="other_param", help="执行其他功能") args = parser.parse_args() # 根据传入的参数调用对应函数 if args.scan_url: scan_website(args.scan_url) elif args.other_param: other_function(args.other_param) else: # 未传入有效参数时打印帮助信息 parser.print_help()
使用示例:
- 执行
py test.py -s google.com,会触发scan_website函数,输出正在扫描网站: google.com - 执行
py test.py -o test_param,会触发other_function函数
方法2:使用子命令(subparsers,适合多命令场景)
如果你的工具需要多个独立命令(类似git clone、git push的结构),用子命令会更规范,逻辑扩展性更强。
代码示例:
import argparse def scan_website(args): print(f"正在扫描网站: {args.url}") # 扫描业务逻辑 def other_function(args): print(f"执行其他功能,参数: {args.param}") if __name__ == "__main__": parser = argparse.ArgumentParser(description="多命令工具示例") # 创建子命令解析器 subparsers = parser.add_subparsers(dest="command", required=True, help="可用命令") # 添加scan子命令并绑定对应函数 scan_parser = subparsers.add_parser("scan", help="扫描网站") scan_parser.add_argument("url", help="要扫描的网站URL") scan_parser.set_defaults(func=scan_website) # 添加other子命令并绑定对应函数 other_parser = subparsers.add_parser("other", help="执行其他功能") other_parser.add_argument("param", help="功能参数") other_parser.set_defaults(func=other_function) args = parser.parse_args() # 调用绑定的函数 args.func(args)
使用示例:
- 执行
py test.py scan google.com,触发scan_website函数 - 执行
py test.py other test_param,触发other_function函数
两种方法对比
- 方法1适合简单的单参数触发场景,命令行输入更简短
- 方法2适合复杂多命令场景,结构清晰,用户可通过
--help直观查看所有可用命令
内容的提问来源于stack exchange,提问作者Mutlithrd
相关产品推荐
相关产品推荐

