Родительская программа может иметь код типа
import mini_program
import sys
<do its own parsing>
if 'use_mini':
<modify sys.argv>
mini_program.main()
Как написано, импорт mini_program
не запускает его анализатор. Но вызов его main
будет, но используя список, найденный в sys.argv
.
Родительский синтаксический анализатор должен быть написан таким образом, чтобы он принимал необходимые ему аргументы и не подавлял входные данные, которые хочет mini
, '-X' и '-y'. Затем он помещает эти «дополнительные» значения в измененный sys.argv
, который может обрабатывать синтаксический анализатор mini
.
parse_known_args
является одним из способов принятия неизвестных аргументов,
https://docs.python.org/3/library/argparse.html#partial-parsing
nargs=argparse.REMAINDER
, https://docs.python.org/3/library/argparse.html#nargs, - это еще один способ сбора оставшихся аргументов для передачи.
Если mini
main
было записано как:
def main(argv=None):
parser = argparse.ArgumentParser()
parser.add_argument('-X', '--attribute_matrix', type=str, help = 'Input: Path/to/Tab-separated-value.tsv')
parser.add_argument('-y', '--target_vector', type=str, help = 'Input: Path/to/Tab-separated-value.tsv')
opts = parser.parse_args(argv)
это можно вызвать с
mini_program.main(['-X', 'astring','-y','another'])
, то есть с явным списком argv
вместо работы с sys.argv
.
Не дать основному парсеру ответить на подсказку -h может быть сложно. subparsers
, вероятно, самый чистый способ сделать это.
Вы можете комбинировать подпарсеры с вызовом mini
main
. Я не буду пытаться выяснить эти детали сейчас.
Другой способ определить main
:
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-X', '--attribute_matrix', type=str, help = 'Input: Path/to/Tab-separated-value.tsv')
parser.add_argument('-y', '--target_vector', type=str, help = 'Input: Path/to/Tab-separated-value.tsv')
return parser
И используйте его как
opts = main().parse_args()
opts = mini_program.main().parse_args()
другими словами, используйте main
, чтобы определить синтаксический анализатор, но задержите синтаксический анализ.