Инструмент Python CLI - общий вопрос синтаксического анализа - PullRequest
3 голосов
/ 17 июня 2010

Если возможно, я бы хотел использовать следующую структуру для команды, однако я не могу понять, как этого добиться в Python:

./somescript.py arg <optional argument> -- "some long argument"

Можно ли достичь этого выполнимым способом без слишком большого количества грязного кода? Или я должен просто пересмотреть синтаксис (который в первую очередь предпочтение).

Спасибо!

Ответы [ 3 ]

3 голосов
/ 17 июня 2010

Я думаю, optparse может сделать это.

1 голос
/ 17 июня 2010

Если вы не хотите использовать тире перед arg и optional_argument, это довольно странно из-за типичного поведения командной строки Unix, но я не понимаю, почему каждый ответ кажется вам верным есть , чтобы использовать тире.Избегать их довольно тривиально, на самом деле ...:

import sys

def before_and_after_doubledashes(args=sys.argv):
    where_doubledashes = args.index('--') if '--' in args else len(args)
    return args[:where_doubledashes], args[where_doubledashes+1:]

Это полностью игнорирует, начинаются ли аргументы с тире или нет, просто выделяет первое вхождение аргумента, которое в точности соответствует двойной тире (если есть)и возвращает кортеж из двух списков, один из всех аргументов, которые находятся перед этим двойным тире, если таковые имеются, один из всех аргументов, следующих за ним (пустой, если нет аргумента двойного тире).Вы можете назначить эти списки из вызова:

before, after = before_and_after_doubledashes()

, а затем обработать их так, как будете (проверить их длину, назначить переменные из их части и т. Д.).

0 голосов
/ 17 июня 2010

Вам просто нужно вставить что-то вроде этого в первую строку: # / usr / local / bin / python

Просто сделайте так, чтобы ваш файл был везде, где находится ваш двоичный файл python.

Что касаетсяargs посмотрите на getopt или optparser

И не забудьте chmod ваш файл, чтобы сделать его исполняемым.

...