调用函数时改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
.
我有一个程序 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
.