Как использовать опцию argparse.REMAINDER, чтобы получить все оставшиеся аргументы в одной строке? - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть строка, которая представляет несколько аргументов, таких как

--arg1 val --arg2 val2

У меня есть одна опция, которая определена как argparse.REMAINDER для чтения всех оставшихся аргументов, я хочу иметь возможность иметь ее как одну строку, а не как список аргументов.

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

--arg1 the  longest bridge --arg2 very true

Есть ли способ достичь этого?

Я не смог найти способ усвоить оставшуюся строку как одну полную строку в argparse.

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

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--class')
parser.add_argument('--value')
parser.add_argument('--parameters', nargs=argparse.REMAINDER)

Строка аргумента:

--class runner --value 3 --parameters --arg1 thread --desc the  whole world

Я ожидаю увидеть результат следующим образом,

args.class = "runner"
args.value = "3"
args.parameters = "--arg1 thread --desc the  whole world"

1 Ответ

0 голосов
/ 18 апреля 2019

Это оболочка, которая разделяет аргументы командной строки, поэтому вам просто нужно заключить аргумент parameters при вызове скрипта, и вам не нужно argparse.REMAINDER.Например:

import argparse
import sys

parser = argparse.ArgumentParser()
parser.add_argument('-a')
parser.add_argument('-p')

print(sys.argv[1:])
print(parser.parse_args())

Вызов из Bash:

$ ./test.py -a 3 -p 'the  whole world'

Выход:

['-a', '3', '-p', 'the  whole world']
Namespace(a='3', p='the  whole world')
...