【问题标题】:python- helper list for sys.argv CLI argumentpython- sys.argv CLI 参数的帮助程序列表
【发布时间】:2019-05-21 22:51:11
【问题描述】:

我必须为我的 python 脚本读取 CLI 参数,然后将用户输入的参数传递给方法。我想为用户提供她可以输入的有效参数列表,例如当您运行带有无效参数或未传递参数的脚本时 - 它表明您只能输入这些参数。

我知道我们可以使用 argparse 模块来实现这一点,但在我的情况下 argparse 将是一个过度杀伤 - 因为我只想将用户提供的任何(有效)参数传递给方法。我应该如何做到这一点?

parser.add_argument('--system-status', '-st', metavar='<host>', type=str)
if args.system-status:
    method(args.system-status)

对于其他 5 个变量重复相同的内容?

【问题讨论】:

  • argparse 不是一个繁重的工具,只需 2 行即可设置 1 个参数,并且作为标准库的一部分,因此没有依赖关系。听起来一点也不夸张
  • @Andrei,我有 6 个参数,所以每个参数需要 6 行,然后再将该参数传递给方法,每个参数的 if 条件?例如-如果我有一个名为“myvaribale1”的变量,我需要做 if args.myvariable: method(args.myvariable) 和其他 5 个变量的相同内容。好像有很多重复
  • 为什么要重新发明轮子?使用 argparse,特别是如果您不知道如何实现它。并添加您到目前为止所拥有的内容,或者您​​正在谈论的参数类型。我们现在没什么可做的了。 Minimal, Complete, and Verifiable example
  • @ThePjot 添加了一个示例。
  • 无论如何您都需要进行 6 次检查,否则您还希望如何进行检查? :) Argparse 的好处是使“无效参数”和“可能的参数”帮助程序更容易。

标签: python argparse argv sys


【解决方案1】:

argparse 库是要走的路,如果你不想检查每个参数,你可以使用这样的东西:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--foo')
parser.add_argument('--bar')
parser.add_argument('--baz')
args = parser.parse_args()

def f(foo=None, bar=None, baz=None, **kwargs):
    print(foo)
    print(bar)
    print(baz)

f(**args.__dict__)

**args.__dict__ 会将字典中的 args 变成 kwargs。

如果你真的不想使用 argparse,那么 sys.argv 会给你传递给函数的参数列表。

【讨论】:

    猜你喜欢
    • 2015-08-25
    • 1970-01-01
    • 2020-10-12
    • 2017-08-22
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    相关资源
    最近更新 更多