【问题标题】:How to read multiple command line parameters with same flag in Python?如何在 Python 中读取具有相同标志的多个命令行参数?
【发布时间】:2014-11-04 21:25:54
【问题描述】:

用户应该能够像这样调用 Python 脚本:

python myScript.py -i inputFile.txt -k string1 -k string2 -k string3 -o outputFile.txt

或者像这样:

python myScript.py -i inputFile.txt -o outputFile.txt -k string1 -k string2

在脚本内部,我想最终读取“-i”参数,“-o”参数,并将所有“-k”参数(可变数量)放入有序列表中。

我想以一种简洁的方式来做这件事(我知道我可以自己从头开始编写,但我宁愿使用已经构建的库/模块)。

我必须使用 Python 2.4.3 并且想使用 getopt(如果不是类似的东西)。我也不允许下载 argparse。

【问题讨论】:

  • Python 2.4.3!那是相当的要求。 . .虽然argparse 是在 python2.7 中添加的,但它确实适用于以前的版本(虽然我不知道有多远——2.4 可能有点太原始了,但你至少可以试一试......)
  • argparse 在 2.7 中是新的,但 optparse 一直回到 2.3,它更接近 argparse 而不是 getopt。使用getopt 的唯一原因是如果您已经非常了解getopt,并且没有理由学习像optparse 这样更新(但已经过时)的东西。
  • @mgilson 是对的(和往常一样)。 PyPI 上的argparse 适用于 2.3+。
  • 同时,无论您选择什么库,您的实际问题是什么?如果您正在寻找图书馆推荐,那不适合 SO。如果您正在寻找教程,那么官方教程将比任何人在 SO 问题中一起拍打的任何东西都要好。选择一个模块(我建议 argparse,但当然这不是建议 :),尝试一下,看看你是否卡住了。
  • 为什么不能导入? (至于不被允许安装……即使你没有安装系统包的权限并且没有设置用户site-config,argparse.py是一个单文件的纯Python模块;你可以如果最坏的情况发生,只需将该文件复制到您的项目目录中。)

标签: python parsing command-line-arguments getopt python-2.4


【解决方案1】:

鉴于我的问题中的限制(Python 2.4.3,没有安装 argparse),我使其工作如下:

from optparse import OptionParser

parser = OptionParser()
parser.add_option('-f', action='append')
parser.add_option('-i', action='store')
parser.add_option('-o', action='store')
(options, args) = parser.parse_args()
print options
print args

给定这个命令行:

python test_argparse.py -f hi -f bye -i input1 -i input2 -o output1 -o output2

我明白了:

{'i': 'input2', 'o': 'output2', 'f': ['hi', 'bye']}
[]

【讨论】:

    【解决方案2】:

    假设您可以安装argparse,您唯一的棘手要求是能够多次指定一个参数。 argparse 用它的 "append" 操作完美地处理了这个问题:

    >>> parser = argparse.ArgumentParser()
    >>> parser.add_argument('-k', action='append')
    _AppendAction(option_strings=['-k'], dest='k', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
    >>> parser.parse_args(['-k', 'foo', '-k', 'bar'])
    Namespace(k=['foo', 'bar'])
    

    【讨论】:

    • 安装 argparse 不是一个可行的选择。我正在研究 optparse 看看它是否有这样的动作。
    猜你喜欢
    • 2012-01-05
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2019-05-25
    相关资源
    最近更新 更多