Python и произвольные параметры командной строки - PullRequest
3 голосов
/ 18 августа 2011

Я пишу основанную на плагинах программу для командной строки, где плагины будут предоставлять дополнительные функциональные возможности поверх того, что я предоставляю.

Например, предположим, я написал простой скрипт, который анализировал изображения и сохранял их, и это все, что я делаю. Затем кто-то другой может написать набор скриптов для управления изображением, поместив свои скрипты в плагин.

Плагин будет загружен, и пользователи смогут получить доступ к плагину, указав его имя в командной строке.

Сценарии нередко хотят предоставить дополнительные опции для пользователя. Предположим, что за несколько лет было написано 20 различных плагинов.

Теперь все авторы хотят разрешить пользователям предоставлять параметры, поэтому основной движок должен взять параметры пользователя и передать их плагину, чтобы он мог обрабатывать их так, как ему хочется.

Чтобы сохранить его единообразным, они могут согласиться, что определенные опции должны выполнять аналогичную операцию. Как и «-o name», следует установить имя выхода в «name». Затем они пойдут на реализацию своих собственных опций и прочего, о чем не знает главный движок (конечно, он не должен знать, что делают плагины)

Я использую устаревший модуль getopt, и он будет выдавать исключения всякий раз, когда я указываю неопределенную опцию. Я слышал о optparse и argparse, но я не уверен, позволят ли они пользователю указывать какие-либо параметры, которые ему нужны, без исключения кода.

Как сделать так, чтобы я мог указать любой параметр командной строки?

Ответы [ 2 ]

6 голосов
/ 18 августа 2011

argparse позволяет частично анализировать список аргументов с помощью метода parse_known_args, возвращая то, что было проанализировано правильно, вместе со списком оставшихся аргументов.

1 голос
/ 18 августа 2011

Решение, которое вы хотите, вероятно, состоит в том, чтобы рассматривать аргументы командной строки как своего рода конвейер процесса. Какие параметры также являются частью того, где эти параметры могут идти.

 command <global options> sub_command <sub_options> new_sub_command <new_sub_options>

каждая команда будет сдвигать опции из sys.argv, пока не найдет ту, которую она не понимает, или ту, которая не может быть допустимой, а затем прекратит синтаксический анализ аргументов, выполнит свою работу и вернет управление плагину. диспетчер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...