【问题标题】:How to use '=' as an argument separator using argparse Python?如何使用 '=' 作为使用 argparse Python 的参数分隔符?
【发布时间】:2015-08-10 19:39:33
【问题描述】:

我想使用 '=' 作为参数分隔符,但在库文档中没有任何选项。因此,argparse 支持将 '=' 作为参数分隔符/分隔符。

class Parse:
    def __init__(self):
        parser = argparse.ArgumentParser()
        parser.add_argument("script_config",help="Script Config File")
        parser.add_argument("devices",help="devices")
        parser.add_argument("log_file",help="log_file")
        parser.add_argument("result_file",help="result_file")
        parser.add_argument("testbed_file",help="testbed_file")
        parser.add_argument("runtime",help="Just Runetime")
        args = parser.parse_args()
        print pprint.pprint(args)

a=Parse()

输出到上面的代码,这里我的运行时是runtime=10

 root@ip-:~/cloudzelera/$ python  ../lib/TestsuiteOption.py /tmp/abc.conf qa05__lnx1__i-12b651ea /tmp/123.suite /tmp/result.tmp /tmp/config runtime=10
Namespace(devices='qa05__lnx1__i-12b651ea', log_file='/tmp/123.suite', result_file='/tmp/result.tmp', runtime='runtime=10', script_config='/tmp/abc.conf', testbed_file='/tmp/config')
None

【问题讨论】:

  • 那么...你能发布一个可以复制粘贴的代码以便我们执行它吗?-

标签: python command-line-arguments argparse argument-passing


【解决方案1】:

runtime 不是可选参数,它是必需的位置参数。因此,您永远不会在命令行上使用该名称:

TestsuiteOption.py /tmp/abc.conf qa05__lnx1__i-12b651ea /tmp/123.suite /tmp/result.tmp /tmp/config 10

如果您希望 runtime 是可选的,请以两个破折号开头(对于长名称):

parser.add_argument("--runtime", help="Just Runtime")

并在命令行上使用相同的:

TestsuiteOption.py /tmp/abc.conf --runtime=10 qa05__lnx1__i-12b651ea /tmp/123.suite /tmp/result.tmp /tmp/config

现在该选项可以在命令行的任何地方使用,包括在开头。

请注意,argparse 使用 UNIX 命令行参数约定,其中可选参数以 - 开头,用于短 1 字符参数,-- 用于长参数。它不适用于其他约定。

【讨论】:

  • 我不能在运行时添加前缀'--',所以我只需要使用runtime=10。
  • @user87005: 那么argparse 帮不了你。您必须编写自己的命令行解析器。
  • 我已经有了自己的解析器(丑陋的 sys.argv 解析器),现在需要添加一些命令行选项,所以我打算迁移到 python 最好的参数解析器。 { 106 # 读取 sys.args 108 script_config = sys.argv[1] 109 devices = sys.argv[2] 110 log_file = sys .argv[3] 111 result_file = sys.argv[4] 112 testbed_file = sys.argv[5] }
  • argparse 使用命令行参数的 UNIX 约定,其中可选参数以 - 开头,用于短 1 字符参数,-- 用于长参数。它不适合其他约定。
【解决方案2】:

鉴于您指定的内容不符合 Unix 参数解析约定,为什么要在末尾添加另一行:

args.runtime = args.runtime.split('=')[1]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多