Я ищу способ сделать параметр командной строки с необязательным аргументом, используя модуль optparse
Python.
Например, есть две командные строки: foobar -u -v
и foobar -u USERNAME -v
. В то время как последний получает USERNAME
в качестве аргумента, первый должен обнаруживать отсутствие аргумента и получать имя пользователя из переменной среды или другими способами, а не рассматривать -v
как аргумент, а вместо этого как опцию.
Я знаю, что есть возможность принимать несколько аргументов, используя действие append
, но для этого требуется хотя бы один аргумент.
Есть ли решения?
ОБНОВИТЬ:
Почему этот скрипт не работает, если аргумент не указан? Я также придал значение Default. Нельзя ли что-то подобное использовать?
#!/usr/bin/env python
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-u", "--user", dest="in_dir",
help="write report to FILE", action= "store", default='USERNAME')
(options, args) = parser.parse_args()
if options.in_dir == 'USERNAME':
print' argument supplied or taken from default '
else:
print 'arugment supplied'
При выполнении этого файла мы получаем ./options.py -f Usage: options.py [options]
options.py: ошибка: опция -f требует аргумента
Поскольку я дал некоторые значения по умолчанию. Почему он не может взять это значение оттуда? Есть ли другое решение для этого?
foobar -u -v
означает взять имя пользователя из переменной среды или если это означает, что имя пользователя-v
. - person BlackJack   schedule 24.07.2014