У меня есть программа main.py, которая использует sys.argv для запуска функций из других модулей:
например: python main.py gui должен запускать функцию main в gui.pypython main.py server start должен запускать функцию main в server.py.
Но если программа просто запускает server.main() в этом примере, sys.argv - это ['main.py', 'server', 'start'], тогда как это должно быть [something, 'start'].
Поскольку server.py также полагается на правильный argv, мне нужно убедиться, что argv, используемый в server.py, отличается от argv, полученного main.py. Как я могу изменить эти значения?






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, чтобы сделать его более доступным.