在argparse中有带破折号的选项

2024-04-28 18:02:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在argparse模块中有一些选项,比如--pm-export,但是当我试图像args.pm-export那样使用它时,我得到的错误是没有属性pm。我怎样才能避开这个问题?是否可以在命令行选项中使用-


Tags: 模块命令行属性选项错误argparseargsexport
3条回答

不幸的是,破折号到下划线的替换对于位置参数(没有前缀--)不起作用,比如

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>)

因此,您应该使用第一个参数add_argument()作为属性名,使用metavarkwarg设置它在帮助中的外观:

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>])

破折号转换为下划线:

import argparse
pa = argparse.ArgumentParser()
pa.add_argument('--foo-bar')
args = pa.parse_args(['--foo-bar', '24'])
print args # Namespace(foo_bar='24')

作为indicated in the ^{} docs

For optional argument actions, the value of dest is normally inferred from the option strings. ArgumentParser generates the value of dest by taking the first long option string and stripping away the initial -- string. Any internal - characters will be converted to _ characters to make sure the string is a valid attribute name

所以你应该使用args.pm_export

相关问题 更多 >