如何在Python多文件中共享使用argparse解析的命令行参数
实现方案
你可以通过以下两种方式实现跨文件全局共享argparse参数,无需给函数额外传参:
方案1:新增公共配置模块存储全局参数(推荐)
该方案无循环导入风险,适配任意项目结构,步骤如下:
- 新建
config.py作为全局参数存储模块,代码如下:
# config.py # 初始化全局参数变量,默认值为None args = None
- 修改
main.py,将解析完成的参数赋值到公共配置模块:
import argparse import config import subfile parser = argparse.ArgumentParser(description='test',formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--a', type=int, default=0, help='test') # 将解析后的参数赋值到公共配置的全局变量中 config.args = parser.parse_args() config.args.a=0 subfile.fun() config.args.a=1 subfile.fun() config.args.a=0 subfile.fun()
- 修改
subfile.py,直接导入公共配置中的参数使用:
from config import args def fun(): if args.a == 0: print('yes') else: print('no')
方案2:子文件函数内延迟导入主模块参数
如果不想新增文件,可以在子文件的函数内部延迟导入主模块的参数,避开初始化顺序问题,直接修改subfile.py即可:
def fun(): # 函数执行时才导入主模块的args,此时main中的args已经完成初始化 from main import args if args.a == 0: print('yes') else: print('no')
注意:不要在subfile的顶层代码中直接导入
main.args,否则main开头导入subfile时,主模块的args还未初始化,会触发导入错误。
内容的提问来源于stack exchange,提问作者WBR
相关产品推荐
相关产品推荐

