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

Gen*_*her 3 python sys argv python-3.x

我有一个程序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,因此我需要确保 中使用的 argvserver.py与 收到的 argv 不同main.py。我怎样才能改变这些值?

Dan*_*den 7

sys.argv可以直接替换:

saved_argv = sys.argv
try:
    sys.argv = ['./server.py', 'start']
    server.main()
finally:
    sys.argv = saved_argv
Run Code Online (Sandbox Code Playgroud)

也就是说,您想要执行此操作(在单元测试之外,这种模式实际上很常见)这一事实表明您可能希望为您的模块构建更好的 API。

例如,也许server.py可以有一个main函数作为独立模块运行,但也可以有另一个类似的函数run_server()可以采用自己的参数而不是依赖于sys.argv.