python - 从外部模块访问 argparse 变量

标签 python argparse

我有 4 个模块:

  • entry_point.py
  • utils.py
  • runner.py
  • client.py

我在 utils.py 中使用了 argparse,我希望能够在 client.py 中检索其中一个参数的值.

  • 入口点模块(从控制台调用的模块):

    import utils
    def main():
        console_args = utils.parse_arguments() # Get command-line arguments
        runner.run(console_args) # The main function in the program
    
    if __name__ == '__main__':
        main()
    
  • utils.py模块:

    def parse_arguments():
        parser = argparse.ArgumentParser()
        parser.add_argument(
            # Several arguments, one of which should be 'url'
        )
        return parser.parse_args()
    
  • runner.py模块:

    import client
    
    def run(arguments):
        user = User.new(arguments.user_id)
        client.get_user_info(user)
    
  • client.py模块:

    def get_user_info(user):
        url = _compose_url('user_status')
        resp = requests.post(url, data=user.id)
    
    def _compose_url(method):
        # TODO: get base_url from console arguments
        # base_url = ?
        return base_url + str(method)
    

我不想将 url 作为参数传递给 client.get_user_info() 因为我认为将它作为参数不是很好对于那个功能。

所以我希望能够直接检索从 utils.parse_arguments() 获得的 argparse 参数。有办法吗?

最佳答案

就像我的评论和 Mike Müller 的回答中的建议一样,下面的代码设置了一个模块级变量。
但是,为了防止在导入时解析参数,我只在调用 parse_arguments 时设置变量。由于在此之前变量设置为 None,因此我也只在需要时导入变量。
这样,parse_arguments 仅在您调用它时运行,而不是在您导入模块时运行。在您的特定情况下可能不需要它,但在例如在包中使用像 utils 这样的模块。

utils.py:

CONSOLE_ARGUMENTS = None

def parse_arguments():
    parser = argparse.ArgumentParser()
    parser.add_argument(
        # Several arguments, one of which should be 'url'
    )
     parser.parse_args()
    global CONSOLE_ARGUMENTS
    CONSOLE_ARGUMENTS = parser.parse_args()
    return CONSOLE_ARGUMENTS

client.py:

def _compose_url(method):
    from .utils import CONSOLE_ARGUMENTS
    base_url = CONSOLE_ARGUMENTS.base_url
    return base_url + str(method)

关于python - 从外部模块访问 argparse 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41322486/

相关文章:

python - 如何使用 arg 解析器库打印参数传递文件的前 n 行

python - 第二个循环中存在冲突的选项字符串

python - python 可以从 C 头文件加载定义吗?

python - Kivy 错误 "Revision format must be X.Y.Z[-tag]"

python - 不和谐.py : How do I get the name of the user who triggers on_member_update?

python - 在Python中将声波编码为图像和文本?

python - 在包含数组元素的数据帧上应用 numpy 运算和向量索引的自然方法

python - nargs > 1 的位置参数的元组元变量值

Python argparse : Make at least one argument required

python - 将强制参数添加到可选参数