我有一个程序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不同。我该如何更改这些值?
答案 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
。