【问题标题】:How can I use python's argparse with a predefined argument string?如何将 python 的 argparse 与预定义的参数字符串一起使用?
【发布时间】:2012-02-11 07:17:26
【问题描述】:

我想使用 pythons argparse 模块来解析我的 cli 参数字符串。这适用于从终端传递的参数,但不适用于给定的字符串。

import argparse

parser = argparse.ArgumentParser(description='Argparse Test script')
parser.add_argument("param", help='some parameter')

argString = 'someTestFile'
print(argString)

args = parser.parse_args(argString)

如果我运行这个脚本,我会得到这个输出:

~/someTestFile
usage: argparsetest.py [-h] param
argparsetest.py: error: unrecognized arguments: o m e T e s t F i l e

~/someTestFile 以某种方式转换为 o m e T e s t F i l e。如前所述,如果我从终端传递文件名,它就可以工作。

我可以想象,这与字符串编码有关。有人知道如何解决这个问题吗?

【问题讨论】:

标签: python argparse


【解决方案1】:

parser.parse_args() 需要一个与sys.argv[1:] 格式相同的序列。如果将字符串视为 sys.argv 序列,则会得到 ['s', 'o', 'm', 'e', 'T', 'e', 's', 't', 'F', 'i', 'l', 'e']。 's' 成为相关参数,然后字符串的其余部分无法解析。

相反,您可能想传入parser.parse_args(['someTestFile'])

【讨论】:

    【解决方案2】:

    就像默认的 sys.argv 是一个列表一样,您的参数也必须是一个列表。

    args = parser.parse_args([argString])
    

    【讨论】:

      【解决方案3】:

      另一种选择是使用shlex.split。如果你有真正的 CLI 参数字符串,它会特别方便:

      import shlex
      argString = '-vvvv -c "yes" --foo bar --some_flag'
      args = parser.parse_args(shlex.split(argString))
      

      【讨论】:

      • 谢谢!这是非常有用的。现在我可以从命令行以及其他 python 脚本运行!
      • 非常有用
      【解决方案4】:

      只需split您的命令字符串:

      args = parser.parse_args(argString.split())
      

      一个完整的例子来展示:

      import argparse
      
      if __name__ == '__main__':
          parser = argparse.ArgumentParser()
          parser.add_argument('--dummy_opt', nargs='*', type=int, help='some ids')
          argString = "--dummy_opt 128 128"
      
          args = parser.parse_args(argString.split())
      
          print(args)
      

      将输出:

      Namespace(pic_resize=[128, 128])

      【讨论】:

        猜你喜欢
        • 2014-09-17
        • 2012-10-22
        • 2014-04-29
        • 2015-03-11
        • 1970-01-01
        • 2016-12-15
        • 2016-03-24
        • 2017-02-24
        • 2020-11-05
        相关资源
        最近更新 更多