【问题标题】:getting command line arguements from optparser without using argv[x]从 optparse 获取命令行参数而不使用 args[x]
【发布时间】:2018-04-02 18:33:31
【问题描述】:

所以我正在尝试向脚本添加功能,该脚本采用可变数量的命令行参数,例如:

python -u hi.py ENTRY_METHOD /onefolder/ /twofolder/ a b c d e f

python -u hi.py ENTRY_METHOD /onefolder/ /twofolder/ a b c d

所以 argv[s] 是这样的:

argv[0] == hi.py
argv[1] == ENTRY_METHOD
argv[2] == /onefolder/
argv[3] == /twofolder/
argv[4] == a
argv[5] == b
argv[6] == c
argv[7] == d

我需要使用 optparser(我知道,旧且已弃用)。

我想让这项工作像这样:

python -u hi.py ENTRY_METHOD -q /onefolder/ /twofolder/ a b c d

其中 -q 做了我需要做的事,但不影响 argv[s] 值(即 d 将继续等于 argv[7] 并且因为它是一个可变数字 -q 不会算作 argv[8 ] 给出命令:

python -u hi.py ENTRY_METHOD /onefolder/ /twofolder/ a b c d -q

有没有人建议我如何做到这一点?

非常感谢任何帮助!

【问题讨论】:

  • 你所说的“-q 在哪里做我需要的”是什么意思?如果你能澄清你的要求,你可能会得到更多有用的解决方案
  • 如果您愿意查看第三方 cli 库,请查看 argparseclick
  • 你试过什么?这就是optparse 的设计目的:提取选项并返回剩余的参数。如果你真的需要剩余的参数替换sys.argv的内容,那么这只是一个简单的赋值。
  • 您是否已经在使用optparse(在这种情况下,为什么sys.argv 的索引很重要?),或者您想引入optparse(在这种情况下索引没关系)?
  • optparse(未记录)和argparse(或多或少记录)都有一个函数可以解析已知参数并将剩余的未解析参数作为列表返回,这将针对您的用例。

标签: python command-line-interface


【解决方案1】:

你可以重置 sys.argv:

argv = list(sys.argv)
argv.remove("-q")
sys.argv = tuple(argv)

【讨论】:

  • 这是否也删除了“-q”,使得 argv 减 1?它似乎将其视为“无”类型(无论哪种方式)并抛出“Nonetype”对象不可迭代
  • @Hans 对不起,我的错误。您可以像这样使用 list.remove 。我编辑了它。
猜你喜欢
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 2014-01-03
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多