argparse.REMAINDER. Все остальные аргументы командной строки собираются в список. Это обычно полезно для утилит командной строки, которые отправляют сообщения другим утилитам командной строки.
Это было удалено из документации 3.9, хотя нет никаких упоминаний о том, что она устарела, и нет никаких веских причин для этого, что я вижу, учитывая, что она обеспечивает полезную функциональность, явно не предоставляемую другими средствами.¹ Его существование все еще упоминается вскользь в другом месте страницы:
Эти [смешанные] парсеры не поддерживают все функции argparse и вызывают исключения, если используются неподдерживаемые функции. В частности, не поддерживаются поданализаторы, argparse.REMAINDER и взаимоисключающие группы, включающие как опциональные, так и позиционные параметры.
Но даже это удалено в документации 3.11. Тем не менее, эта функция сохраняется даже в Python 3.11.4, последней выпущенной версии.
Так почему же она была удалена из документации?
Я спрашиваю об этом, потому что ответ, похоже, напрямую связан с несколькими другими связанными с мной вопросами о программировании анализаторов аргументов в Python. (Конкретные ситуации, в которых я использовал, использую и могу продолжать использовать nargs=REMAINDER
, достаточно обширны, и я считаю, что при необходимости их следует публиковать в виде отдельных вопросов.) Соображения включают в себя:
Не работает ли API каким-либо образом для моих целей, и означает ли это, что мой код, который его использует, также сломан?
Следует ли мне искать замену этому API?
Следует ли мне продолжать использовать этот API в новом коде? В конце концов, он не устарел.
Должен ли я конвертировать существующий код, использующий этот API, для использования чего-то другого?
(Обратите также внимание, что ответы на подобные вопросы будут не только зависеть от конкретного контекста, в котором используется nargs=REMAINDER, но также могут рассматриваться как вопросы мнения, что является еще одной причиной оставить их за пределами этого вопроса.)
¹ nargs=REMAINDER отличается от nargs='*': использование REMAINDER означает, что с этого момента argparse не будет пытаться анализировать параметры (начинающиеся с -). Таким образом, при использовании REMAINDER mycmd -q run bash -c exit не будет пытаться анализировать -c как опцию mycmd, а вместо этого строка будет обрабатываться как mycmd -q run -- bash -c exit с '*'.
В документации модуля Python argparse в документации версии 3.8 указано, что для nargs может быть установлено значение:
[code]argparse.REMAINDER. Все остальные аргументы командной строки собираются в список. Это обычно полезно для утилит командной строки, которые отправляют сообщения другим утилитам командной строки.
Это было удалено из документации 3.9, хотя нет никаких упоминаний о том, что она устарела, и нет никаких веских причин для этого, что я вижу, учитывая, что она обеспечивает полезную функциональность, явно не предоставляемую другими средствами.¹ Его существование все еще упоминается вскользь в другом месте страницы:
Эти [смешанные] парсеры не поддерживают все функции argparse и вызывают исключения, если используются неподдерживаемые функции. В частности, не поддерживаются поданализаторы, argparse.REMAINDER и взаимоисключающие группы, включающие как опциональные, так и позиционные параметры.
Но даже это удалено в документации 3.11. Тем не менее, эта функция сохраняется даже в Python 3.11.4, последней выпущенной версии. Так почему же она была удалена из документации?
Я спрашиваю об этом, потому что ответ, похоже, напрямую связан с несколькими другими связанными с мной вопросами о программировании анализаторов аргументов в Python. (Конкретные ситуации, в которых я использовал, использую и могу продолжать использовать nargs=REMAINDER[/code], достаточно обширны, и я считаю, что при необходимости их следует публиковать в виде отдельных вопросов.) Соображения включают в себя: [list] [*]Не работает ли API каким-либо образом для моих целей, и означает ли это, что мой код, который его использует, также сломан? [*]Следует ли мне искать замену этому API? [*]Следует ли мне продолжать использовать этот API в новом коде? В конце концов, он не устарел. [*]Должен ли я конвертировать существующий код, использующий этот API, для использования чего-то другого? [/list] (Обратите также внимание, что ответы на подобные вопросы будут не только зависеть от конкретного контекста, в котором используется nargs=REMAINDER, но также могут рассматриваться как вопросы мнения, что является еще одной причиной оставить их за пределами этого вопроса.)
¹ nargs=REMAINDER отличается от nargs='*': использование REMAINDER означает, что с этого момента argparse не будет пытаться анализировать параметры (начинающиеся с -). Таким образом, при использовании REMAINDER mycmd -q run bash -c exit не будет пытаться анализировать -c как опцию mycmd, а вместо этого строка будет обрабатываться как mycmd -q run -- bash -c exit с '*'.