【问题标题】:Python argparse parameter with hyphen带有连字符的 Python argparse 参数
【发布时间】:2020-11-29 10:07:35
【问题描述】:

如何使用 python argparse 模块解析带 HYPHEN 的参数?

MWE

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-idir','--input-dir')
args = parser.parse_args()

# My attempts
idir = args.idir
idir = args.input-dir
idir = args['input-dir']

print(args)

注意:当然我可以使用下划线 input_dir 但我正在寻找一种用连字符解析参数的方法,例如input-dir

【问题讨论】:

  • 这是由规范化参数引起的,这会丢失一些信息。在 argparse 中 --foo=-bar 有效,但 --foo -bar 无效。这是因为 argparse 认为 -bar 是单独的参数。
  • ... but I am looking for a way to parse the parameter with hyphen 为什么?为什么这有关系?它有什么区别?使用args.input_dir
  • @DeepSpace 我继承了一些带有输入参数名称的 bash 脚本,例如 input-dir,我正在将 bash 脚本翻译成 python 脚本。
  • 这能回答你的问题吗? Having options in argparse with a dash
  • 要使用 args.name 语法 name 必须是一个有效的 Python 变量名。它不能包含-。这就是argparse 将您的论点转换为args.input_dir 的原因。

标签: python argparse


【解决方案1】:

我推荐一个调试打印:

import argparse    
parser = argparse.ArgumentParser()
parser.add_argument('-idir','--input-dir')
args = parser.parse_args()
print(args)

这显示了实际的属性名称:

1156:~/mypy$ python3 stack63329421.py 
Namespace(input_dir=None)
1157:~/mypy$ python3 stack63329421.py -h
usage: stack63329421.py [-h] [-idir INPUT_DIR]

optional arguments:
  -h, --help            show this help message and exit
  -idir INPUT_DIR, --input-dir INPUT_DIR
1157:~/mypy$ python3 stack63329421.py --input-dir foobar
Namespace(input_dir='foobar')

现在我可以添加如下打印:

print(args.input_dir)                  # works with a valid attribute name
print(getattr(args, 'input_dir'))      # works with anything

然后得到:

1158:~/mypy$ python3 stack63329421.py --input-dir foobar
Namespace(input_dir='foobar')
foobar
foobar

如果您不喜欢帮助,请添加metavar

..., metavar='INPUT-DIR'

1158:~/mypy$ python3 stack63329421.py -h
usage: stack63329421.py [-h] [-idir INPUT-DIR]

optional arguments:
  -h, --help            show this help message and exit
  -idir INPUT-DIR, --input-dir INPUT-DIR

【讨论】:

    猜你喜欢
    • 2017-07-29
    • 1970-01-01
    • 2015-07-06
    • 2012-10-21
    • 2016-04-08
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    相关资源
    最近更新 更多