Встроенный модуль argparse
, как сказал @ToTheMax, может создавать сложные интерфейсы командной строки.
По умолчанию argparse.ArgumentParser.parse_args()
будет читать аргументы командной строки для вашей утилиты из sys.argv
, но если вы передать массив, он будет использовать его вместо этого.
Вы можете lex (разделить на массив "слов") строку так же, как оболочка использует shlex.split()
, которая также встроена. Если вы используете кавычки, как в вашем примере, слова между ними не будут разделяться, как в оболочке.
Вот полный пример. Обратитесь к документации, потому что это предварительное использование argparse
. Есть раздел, в котором говорится о «подкомандах», на которых основан этот пример.
import argparse
import shlex
def do_say(args):
print(args.what)
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
say_command = subparsers.add_parser('say')
say_command.add_argument('what')
say_command.set_defaults(func=do_say)
command = 'say "hi this is a test"'
args = parser.parse_args(shlex.split(command))
args.func(args)
Модуль cmd
- это еще один встроенный способ создания командной строки, но он этого не делает. сделайте разбор за вас, так что вы можете объединить его с argparse
и shlex
.