Справочное сообщение gstreamer переопределяет мое сообщение argparse

Я пытаюсь использовать argparse для обработки аргументов командной строки моего приложения, но у меня возникли проблемы с gstreamer (который использует мое приложение). Когда я даю параметр -h для своего приложения, вместо того, чтобы показывать справочное сообщение, которое я определил для аргументов моей программы, оно показывает странное справочное сообщение gstreamer, опуская справку для моих аргументов.

У меня есть следующее определение парсера в моем коде:

parser = argparse.ArgumentParser()
parser.add_argument("-c", "--capture", help="Specifies the capture device.\n 0 - Webcam \n 1 - Kinect", type=int, choices=[0, 1], default=0)
parser.add_argument("-i", "--interval", help="Specifies the capture interval in seconds when the auto-capture is on", type=int, choices=[4, 5, 6, 7, 8], default=4)
args = parser.parse_args()

и сообщение, которое я получаю, когда запускаю свою программу с -h (я говорю о бразильско-португальском языке, но этого достаточно, чтобы увидеть общую структуру справочного сообщения и отсутствие помощи для моих необязательных аргументов)

Uso:
  FasTracker.py [OPÇÃO...] - GStreamer initialization

Opções de ajuda:
  -h, --help                        Exibe opções de ajuda
  --help-all                        Exibe todas as opções de ajuda
  --help-gst                        Exibir opções do GStreamer

Я делаю что-то не так, или есть способ подавить справочное сообщение Gstreamer?

заранее спасибо


person Alberto A    schedule 21.08.2012    source источник
comment
Опция --help-all также печатает ваши параметры?   -  person av501    schedule 23.08.2012
comment
У меня такая же проблема. Вы смогли это решить?   -  person amit    schedule 07.09.2012
comment
К сожалению, еще не Федр. Еще не пробовал --help-all! как только у меня снова будет доступ к коду, я попробую.   -  person Alberto A    schedule 07.09.2012


Ответы (1)


У меня тоже была такая же проблема. Я использую пакет ubuntu 10.10 + python 2.6 + python-gst0.10.

Наконец я отследил ошибку следующим образом: import gst перед parser.parse_args() изменяет sys. Чтобы воспроизвести, поместите следующий код в main.py:

if __name__=='__main__':
    import argparse, sys
    pparser = argparse.ArgumentParser(description='my program')
    pparser.add_argument('--plot', action='store_true', default=False, help="Show a plot")
    pparser.add_argument('--log', action='store_true', default=False, help="Write log output")
    pparser.add_argument('filename', action='store', type=str)
    import gst
    args = pparser.parse_args(sys.argv[1:])

и запустите python main.py -h. Это приводит к следующему ошибочному выводу:

Usage:
  main.py [OPTION...] - GStreamer initialization

Help Options:
  -h, --help                        Show help options
  --help-all                        Show all help options
  --help-gst                        Show GStreamer Options

Если мы удалим import gst (или переместим оператор после parse_args), то вывод будет правильным:

usage: main.py [-h] [--plot] [--log] filename

my program

positional arguments:
  filename

optional arguments:
  -h, --help  show this help message and exit
  --plot      Show a plot
  --log       Write log output
person amit    schedule 14.09.2012