LINUX.ORG.RU

Ищу гайдлайн по специфицированию параметров командной строки

 , ,


0

1

Что, если нужно передать в программу одно значение? Что если значение из фиксированного множества? А если нужно передать массив (чисел или строк)? Какими символами всё это разделяют обычно в командной строке (минусы? точки? двоеточия? знак равенства как в -DAAA=BBB?) и что почитать по этому поводу.

читал то-сё:
POSIX - http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_1...
GNU - https://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html
https://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html

И как-то я не вдохновлён полнотой описания и наличием примеров/сценариев использования.

Ответ на: комментарий от t184256

Для других иногда действительно не хватает нормального парсера, но в питоне-то это зачем? Стандартный argparse офигенен, даже старый optparse был что надо. Причём код реально удобней накидать, чем доку расписывать.

WitcherGeralt ★★ ()
Ответ на: комментарий от WitcherGeralt

Чтобы reference implementation был читаем, очевидно же. Они вроде там десяток разных имплементаций засандалили для языков менее счастливых людей, чем мы с тобой.

t184256 ★★★★★ ()
Ответ на: комментарий от t184256

Там чувак в презентации говорит, что в сущности достаточно сдампить хелп из argparse и готово. Это фича конечно, если хочется что-то на другом языке с аналогичным cli запилить. Но для питона оно того не стоит.

Не готов променять такую простую реализацию сабкоманд на выхлоп в виде словарика:

parser = argparse.ArgumentParser(description="Some CLI tool")
sub = parser.add_subparsers(
    title="subcommands",
    description="use <subcommand> --help for more info"
)

for func in (push, notice):
    p = sub.add_parser(func.__name__)
    p.add_argument("event", type=str)
    p.add_argument("level", type=int, choices=levels)
    p.add_argument("message", nargs="+")
    p.add_argument("--json", "-j")
    p.set_defaults(func=func)

p = sub.add_parser("view")
p.add_argument("--limit", "-l", type=int, default=16)
p.add_argument("--verbose", "-v", action="store_true")
p.set_defaults(func=view)

p = sub.add_parser("search")
# ...
p.add_argument("--verbose", "-v", action="store_true")
p.set_defaults(func=search)

args = parser.parse_args()
args.func(args)

Плюс кастомные функции для приведения типов и тому подобное.

WitcherGeralt ★★ ()
Ответ на: комментарий от Einstok_Fair

размер буфера командной строки гигабайт. ту емнип как-то отписывались об упирании в этот предел.

открыть прогу и скормить ей в stdin поток данных ?? аккурат для такого и создавались.

pfg ★★★ ()