Использование argcomplete после частичного разбора - PullRequest
0 голосов
/ 16 января 2019

Мой скрипт Python принимает имя файла в качестве аргумента, а затем добавляет дополнительные аргументы в зависимости от содержимого этого файла. Это сделано

  1. Добавление фиксированных аргументов (т. Е. filename)
  2. Вызов parser.parse_known_args() для получения фиксированных аргументов
  3. Добавление некоторых динамических аргументов в зависимости от содержимого filename
  4. Вызов parser.parse_args() для анализа оставшихся аргументов

Теперь я хотел бы включить завершение табуляции с помощью argcomplete. Поэтому я хочу вызвать argcomplete.autocomplete(parser) прямо перед шагом 4. Однако это не работает, поскольку argcomplete, очевидно, работает только до шага 2.

Итак, мой вопрос: есть ли способ автозаполнения аргументов, которые добавляются к ArgumentParser после parser.parse_known_args(), но до parser.parse_args()?

1 Ответ

0 голосов
/ 16 января 2019

Глядя на argcomplete и как это работает. Вы можете поместить его после parser.parse_known_args() и до parser.parse_args(), но это не принесет вам особой пользы, поскольку он запускает ваш сценарий и проверяет parser, предоставленный для определения параметров автозаполнения. Он не передает никакие аргументы (то есть то, что уже было введено в командной строке) скрипту.

Чтобы при вызове argcomplete ваш скрипт не имел представления о том, что filename было передано и какие другие аргументы должны быть добавлены динамически.

Также, если бы у вас были какие-либо required=True аргументы, уже добавленные в анализатор до запуска parser.parse_known_args(), вы действительно никогда бы не запустили argcomplete.autocomplete(parser), потому что выполнение скрипта не было бы выполнено в первом до достижения последнего (опять же, для цель автозаполнения - скрипт запускается без каких-либо параметров, передаваемых ему).

...