Я хочу иметь некоторые параметры в модуле argparse, такие как --pm-export
однако, когда я пытаюсь использовать его как args.pm-export
я получаю сообщение об ошибке, что нет атрибута pm
. Как я могу обойти эту проблему? Возможно ли иметь -
в параметрах командной строки?
Наличие опций в argparse с тире
Ответ 1
Как указанный в argparse
docs:
Для дополнительных действий с аргументами значение dest обычно выводится из строк опций. ArgumentParser генерирует значение dest, беря первую длинную строку опций и удаляя начальную строку
--
. Любые внутренние символы-
будут преобразованы в символы_
, чтобы убедиться, что строка является допустимым именем атрибута
Итак, вы должны использовать args.pm_export
.
Ответ 2
К сожалению, замена тире-под-подчеркиванием не работает для позиционных операций (без префикса --
), например
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('logs-dir',
help='Directory with .log and .log.gz files')
parser.add_argument('results-csv', type=argparse.FileType('w'),
default=sys.stdout,
help='Output .csv filename')
args = parser.parse_args()
print args
# gives
# Namespace(logs-dir='./', results-csv=<open file 'lool.csv', mode 'w' at 0x9020650>)
Итак, вы должны использовать 1-й аргумент для add_argument()
как имя атрибута и metavar
kwarg, чтобы установить, как он должен выглядеть в справке:
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('logs_dir', metavar='logs-dir',
nargs=1,
help='Directory with .log and .log.gz files')
parser.add_argument('results_csv', metavar='results-csv',
nargs=1,
type=argparse.FileType('w'),
default=sys.stdout,
help='Output .csv filename')
args = parser.parse_args()
print args
# gives
# Namespace(logs_dir=['./'], results_csv=[<open file 'lool.csv', mode 'w' at 0xb71385f8>])
Ответ 3
Черточки преобразуются в символы подчеркивания:
import argparse
pa = argparse.ArgumentParser()
pa.add_argument('--foo-bar')
args = pa.parse_args(['--foo-bar', '24'])
print args # Namespace(foo_bar='24')
Ответ 4
Если у вас есть скрипт на python, который должен делегировать аргументы CLI и выбрать его, то получает приложение Java CLI. Имена опций одинаковы в приложениях Python и Java.
Проблема в том, что некоторые из этих опций содержат тире. В результате, когда я составляю командную строку Java для выполнения, эти аргументы заканчиваются подчеркиванием вместо черточки, которое затем отклоняется приложением Java.
Например, командная строка:
add --web-query = "котировки акций" --corpus = "цитаты"
заканчивается пересылкой в приложение Java как:
add --web_query = "котировки акций" --corpus = "котировки"
которое отклоняет приложение Java.
Могу ли я узнать, какое ОРИГИНАЛЬНОЕ имя опции было в командной строке, которая была проанализирована?
Я всегда могу просто заменить подчеркивание дефисами, но что если оригинальное имя опции DID содержит дефис?
Любая помощь будет оценена.
Спасибо.
Alain