我有一个程序main.py
使用sys.argv
从其他模块运行函数:
例如:
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 不同.如何更改这些值?
最佳答案
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
。
关于python - 调用函数时更改 Python 3 sys.argv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49955228/