Python optparse не работает для меня
В настоящее время я учусь тому, как использовать модуль Python optparse. Я пытаюсь следующий пример сценария, но переменная args выходит пустым. Я попробовал это, используя Python 2.5 и 2.6, но безрезультатно.
import optparse
def main():
p = optparse.OptionParser()
p.add_option('--person', '-p', action='store', dest='person', default='Me')
options, args = p.parse_args()
print '\n[Debug]: Print options:', options
print '\n[Debug]: Print args:', args
print
if len(args) != 1:
p.print_help()
else:
print 'Hello %s' % options.person
if __name__ == '__main__':
main()
Выход:
>C:\Scripts\example>hello.py -p Kelvin
[Debug]: Print options: {'person': 'Kelvin'}
[Debug]: Print args: []
Usage: hello.py [options]
Опции: -h, --help показать это справочное сообщение и выйти из -p PERSON, --person=PERSON
4 ответа
args
Переменная содержит любые аргументы, которые не были назначены для опции. Ваш код действительно работает правильно, назначив Kelvin
к person
переменная параметра
Если вы пытались запустить hello.py -p Kelvin file1.txt
, вы найдете это person
до сих пор было присвоено значение "Kelvin"
, а затем ваш args
будет содержать "file1.txt"
,
Смотрите также документацию поoptparse
:
parse_args()
возвращает два значения:
options
объект, содержащий значения для всех ваших опций, например, если--file
принимает один строковый аргумент, затемoptions.file
будет именем файла, предоставленным пользователем, илиNone
если пользователь не предоставил эту опциюargs
, список позиционных аргументов, оставшихся после парсинга опций
В соответствии с optparse
Помогите:
"При успешном завершении возвращает пару (values, args), где 'values' - это экземпляр Values (со всеми значениями вашего параметра), а" args "- это список аргументов, оставшихся после анализа параметров."
Пытаться hello.py -p Kelving abcd
- 'Kelvin' будет проанализирован с помощью optparse, 'abcd' попадет в args
переменная, возвращаемая parse_args
import ast
(options, args) = parser.parse_args()
noargs = ast.literal_eval(options.__str__()).keys()
if len(noargs) != 1:
parser.error("ERROR: INCORRECT NUMBER OF ARGUMENTS")
sys.exit(1)
Примечание: "параметры" - это словарь с добавленными вами параметрами. "Args" - это список с неразобранными аргументами. Вы не должны смотреть на длинные "арги". Вот расшифровка для иллюстрации:
moshez-mb:profile administrator$ cat foo
import optparse
def main():
p = optparse.OptionParser()
p.add_option('--person', '-p', action='store', dest='person', default='Me')
options, args = p.parse_args()
print '\n[Debug]: Print options:', options
print '\n[Debug]: Print args:', args
print
if len(args) != 1:
p.print_help()
else:
print 'Hello %s' % options.person
if __name__ == '__main__':
main()
moshez-mb:profile administrator$ python foo
[Debug]: Print options: {'person': 'Me'}
[Debug]: Print args: []
Usage: foo [options]
Options:
-h, --help show this help message and exit
-p PERSON, --person=PERSON
moshez-mb:profile administrator$ python foo -p Moshe
[Debug]: Print options: {'person': 'Moshe'}
[Debug]: Print args: []
Usage: foo [options]
Options:
-h, --help show this help message and exit
-p PERSON, --person=PERSON
moshez-mb:profile administrator$ python foo -p Moshe argument
[Debug]: Print options: {'person': 'Moshe'}
[Debug]: Print args: ['argument']
Hello Moshe
moshez-mb:profile administrator$