调用函数时改Python3sys.argv

Change Python 3 sys.argv when calling a function

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

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

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

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

sys.argv可以直接换成:

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

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

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