调用函数时如何更改Python 3中的sys.argv

3

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

例如:
python main.py gui 应该运行 gui.py 中的 main 函数
python main.py server start 应该运行 server.py 中的 main 函数。

但是如果程序仅在这个例子中运行 server.main(),那么当应该是 [something, 'start'] 时,sys.argv['main.py', 'server', 'start']

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

1个回答

7

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


谢谢。考虑到这种解决方案的不稳定性,我认为我会找到一种方法来更新API,使其更易于访问。 - Geno Racklin Asher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接