【问题标题】:Change Python 3 sys.argv when calling a function调用函数时更改 Python 3 sys.argv
【发布时间】:2018-04-21 19:27:53
【问题描述】:

我有一个程序main.py,它使用sys.argv 来运行其他模块的功能:

例如:
python main.py gui 应该在 gui.py 中运行 main 函数
python main.py server start 应该在 server.py 中运行 main 函数。

但是如果程序在这个例子中只是运行server.main(),那么sys.argv应该是['main.py', 'server', 'start'],而它应该是[something, 'start']

由于server.py 也依赖于正确的argv,我需要确保server.py 中使用的argv 与main.py 收到的argv 不同。如何更改这些值?

【问题讨论】:

    标签: python python-3.x argv sys


    【解决方案1】:

    sys.argv 可以直接替换:

    saved_argv = sys.argv
    try:
        sys.argv = ['./server.py', 'start']
        server.main()
    finally:
        sys.argv = saved_argv
    

    也就是说,您想要这样做(在单元测试之外,这种模式实际上很常见)表明您可能想要为您的模块构建更好的 API。

    例如,当server.py 作为独立模块运行时,也许main 可以有一个main 函数,但也有像run_server() 这样的另一个函数,它可以接受自己的参数,而不是依赖于sys.argv

    【讨论】:

    • 谢谢。鉴于这种解决方案有些不稳定,我想我会找到一种方法来更新 API 以使其更易于访问。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 2021-12-07
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多