Каков шаблон проектирования для обработки аргументов командной строки - PullRequest
44 голосов
/ 10 сентября 2008

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

Рассмотрим:

myprogram -f filename -d directory -r regex

Как вы организуете функции обработчика после получения аргументов, используя любые встроенные функции для вашего языка? (приветствуются конкретные языковые ответы, если это поможет вам сформулировать ответ)

Ответы [ 16 ]

1 голос
/ 10 сентября 2008

Getopt - единственный путь.

http://sourceforge.net/projects/csharpoptparse

1 голос
/ 10 сентября 2008

Я бы порекомендовал использовать библиотеку процессора командной строки. Какой-то русский парень создал приличного, но их там множество. Это сэкономит вам время, чтобы вы могли сконцентрироваться на целях своего приложения, а не анализировать параметры командной строки!

0 голосов
/ 10 сентября 2008

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

0 голосов
/ 10 сентября 2008

Стандартный дизайн обычно соответствует тому, что делает getopt, есть библиотеки getopt для многих языков, .NET, python, C, Perl, PHP и т. Д.

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

Эта статья обсуждает это более подробно.

0 голосов
/ 10 сентября 2008

Я использую Getopts :: std и Getopts :: long в perl, а также функцию Getopt в C. Это стандартизирует синтаксический анализ и формат параметры. Другие языки имеют разные механизмы для их обработки.

Надеюсь, это поможет

0 голосов
/ 10 сентября 2008

Вы не упоминаете язык для этого, но если вы ищете действительно хорошую обёртку Objective-C для getopt, то Dave Dribin Framework DDCLI действительно хорош.

http://www.dribin.org/dave/blog/archives/2008/04/29/ddcli

...