При использовании argparse
, мне нужно убедиться, что пользователь вводит две строки. Однако есть два возможных варианта для ввода строк в, например. варианты -a
и -b
. Они должны быть в состоянии сделать любое из следующих действий:Как проверить общее количество переданных аргументов?
python runscript.py -a str1 str2
python runscript.py -a str1 -b str2
python runscript.py -b str1 str2
Ключ должен быть только два входа, но они могут быть в любой из доступных вариантов.
Моя попытка в основном устанавливает аргументы как этот
parser.add_argument('-a', nargs='*')
parser.add_argument('-b', nargs='*')
Тогда я должен сделать это:
if (args.a): num_a = len(args.a) # I need to check if the -a option was even used
else: num_a = 0
if (args.b): num_b = len(args.b) # same as above but for -b option
else: num_b = 0
# Check that number of arguments is correct
if (num_a + num_b) != 2:
<error code>
Это кажется немного постороннее. Есть ли более питонический способ сделать это?
Какой смысл делать ' -a' и '-b', что вы не можете просто определить два позиционных аргумента (или один позиционный аргумент с' nargs = 2')? – chepner
Так или иначе вы должны суммировать длину аргументов. Ничто в 'argparse' не сделает это за вас. – hpaulj
@chepner Я уверен, что есть много случаев, когда вам это может понадобиться, но для моего случая: я хочу, чтобы пользователь вводил два имени файла для сравнения. Мне нужно, чтобы они также указывали, какие файлы они вводят, поскольку расширение имени файла может быть произвольным. Таким образом, нет никакого способа узнать, какой файл пользователь явно не говорит мне, используя параметры. Затем, в зависимости от того, какой вариант файла они выбирают, я разбираю файл по-разному. то есть есть два типа файлов, которые содержат подобную информацию, но отформатированы по-разному, и мне нужно знать, какой способ проанализировать любой тип файла. – supernun