ArgumentParser -h (помощь) не будет работать - PullRequest
0 голосов
/ 09 февраля 2012

Я не могу заставить работать ArgumentParser. Что не так со следующим:

import argparse
parser=argparse.ArgumentParser(description='''I wish this description would output''',
                                            epilog='''Please out the epilog''')

parser.add_argument('-l', type=str, default='info', help='logging level. Default is info. Use debug if you have problems.')
args=parser.parse_args()

def main():
    print("goodbye")

if __name__ == "__main__":
    #main
    main()

Когда я запускаю myscript -h, я не вижу помощи.

Я использую Python 2.7 в Windows 7. У меня есть Python на моем пути, а также pathext установлен как:

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.py

Ответы [ 3 ]

2 голосов
/ 09 февраля 2012

Argsparse-код фактически никогда не выполняется. Выполняя скрипт из командной строки, вы вызываете main(), который просто печатает и завершает работу. Вы должны вызвать parse_args() в функции main(), чтобы это работало.

import argparse

# Personally, I think these belong in the main()
# function as well, but they don't need to be.
parser = argparse.ArgumentParser(
    description="I wish this description would output",
    epilog="Please out the epilog"
)
parser.add_argument(
    "-l",
    type=str,
    default="info",
    help="logging level. Default is info. Use debug if you have problems."
)

def main():
    args = parser.parse_args() # Parses arguments
    print("goodbye")

if __name__ == "__main__":
    main() # Calls main

Производит:

~/Desktop $ python untitled.py --help
usage: untitled.py [-h] [-l L]

I wish this description would output

optional arguments:
  -h, --help  show this help message and exit
  -l L        logging level. Default is info. Use debug if you have problems.

Please out the epilog

jcollado утверждает, что ваш код работал в Ubuntu нормально - мне это очень любопытно.

1 голос
/ 09 февраля 2012

Если вы запустите этот скрипт из командной строки, вы собираетесь просто напечатать 'до свидания', поставьте код argparse после if __name__ == "__main__":.

0 голосов
/ 09 февраля 2012

ОК, странный ответ на это.Проблема была решена путем вызова программы следующим образом:

python myscript.py -h

Если вы добавите python в свой путь, установите ассоциации файлов и просто выполните:-h

...