【问题标题】:Parsing arguments with python argparse使用 python argparse 解析参数
【发布时间】:2018-12-14 04:49:43
【问题描述】:

我找不到任何示例来以我需要的方式解析参数。其中包含 : 的名称是已知列表(其中 30 个),它们后面的值可能有也可能没有值,但有些是必需的。

creatAlert.py call_type: I alert_id: 25 message: STATUS OF AGENT PLATFORM notes:

所以我试图只解析call_type: I,但没有运气。在call_type 变量中获取'I' 缺少什么?

parser = argparse.ArgumentParser()
parser.add_argument("call_type:", type=str, help="Testing")
args = parser.parse_args()
print args.call_type

处理包含空格的消息参数是否需要特殊技巧?

【问题讨论】:

  • 你为什么说你需要以这种非常不寻常的格式接受参数?
  • 事实上,这个供应商产品将我的脚本称为用户出口。如果可以的话,我会改变它,但我不能,所以我必须忍受我得到的。
  • 我不认为 argparse 可以处理这个问题。您需要推出自己的代码。

标签: python python-2.7 argparse


【解决方案1】:

argparse 的期望与提供的格式不同。如果您的上游应用程序不遵循 argparse 约定,那么 argparse 将无法轻松运行。

相反,我建议您将整个输入行作为一个字符串。搜索冒号并在这些单词处划分行,将结果值放入字典中。使用蛮力很容易(足够)做到这一点。

  • 用冒号查找第一个单词;将其设为 dict 键
  • 将单词连接到该键的值中,直到您点击 EOL 或下一个带有冒号的单词。

【讨论】:

    【解决方案2】:

    import sys
    print(sys.argv)
    
    2328:~/mypy$ python3 stack51195799.py call_type: I alert_id: 25 message: STATUS OF AGENT PLATFORM notes:
    ['stack51195799.py', 'call_type:', 'I', 'alert_id:', '25', 'message:', 'STATUS', 'OF', 'AGENT', 'PLATFORM', 'notes:']
    

    argparse 尝试解析 argv[1:],在本例中是 10 个字符串的列表。 ':' 对 shell(拆分命令行)或解析器没有任何特殊含义。

    如果您直接解析该列表,则必须使用该列表。

    【讨论】:

      猜你喜欢
      • 2014-03-04
      • 2015-03-04
      • 2016-05-30
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      • 2014-05-20
      • 2015-07-20
      相关资源
      最近更新 更多