optparse для работы, если нет вариантов в Python
Мне нужно загрузить аргумент, даже если есть опция и если нет опции.
#!/usr/bin/python
import optparse
parser = optparse.OptionParser()
parser.add_option('-i', dest='name', help='some')
parser.add_option('-c', dest='name', help='some')
parser.add_option('-p', action='store', help='password')
print parser.parse_args()
[root@server tmp]# ./test -i abc
(<Values at 0x4011368: {'p': None, 'name': 'abc'}>, [])
[root@server tmp]# ./test abc
(<Values at 0x5855368: {'p': None, 'name': None}>, ['abc'])
Теперь мне нужно иметь значение "abc", даже если я не использую никакой опции. Поэтому, пожалуйста, дайте знать, как я могу получить доступ к этому значению.
2 ответа
Основываясь исключительно на вашей продукции, вы сможете увидеть, что parse_args
возвращает кортеж Первый элемент этого кортежа - это объект, содержащий значения для определенных параметров, а второй элемент - список аргументов, оставшихся после анализа параметров. Вы можете прочитать больше об этом в официальном уроке.
Имея это в виду, вы можете просто написать
options, arguments = parser.parse_args()
и использовать arguments
делать что угодно с этим списком.
Однако, похоже, ваша проблема заключается в том, что при указании параметра аргумент анализируется как значение параметра. Это вызвано тем, как вы определяете параметры, потому что параметры -i
а также -c
нужны ценности.
Если вы хотите, чтобы эти параметры были логическими, вы должны определить это вручную. Пример для одного варианта кода будет что-то вроде
# This defines an option which set name to True if option is provided, otherwise
# name is set to False
parser.add_option('-i', dest='name', help='some', action="store_true", default=False)
Это также означает, что вам не нужно указывать значение для этой опции, поэтому аргумент не будет использоваться, когда парсер читает опции.
Если вы хотите, чтобы ваши параметры были не булевыми, но не хотите подтвержденных значений для них, тогда я не уверен, что получаю то, что вы пытаетесь сделать.
Увидеть это возможно: 15.5.2.3. Обработка логических (флаговых) опций