调用函数时更改Python 3 sys.argv

时间:2018-04-21 11:22:02

标签: python python-3.x argv sys

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

e.g:
python main.py gui应运行main中的gui.py功能 python main.py server start应在main中运行server.py函数。

但是,如果该示例仅在此示例中运行server.main(),则sys.argv['main.py', 'server', 'start']时应为[something, 'start']

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

1 个答案:

答案 0 :(得分:1)

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