【问题标题】:python get specific argpython获取特定的arg
【发布时间】:2021-02-21 08:53:03
【问题描述】:

我得到了一个带有初始值的程序:

SIZE = 100
NB = 100
WIDTH_CANVAS = 150
[...]

但我想允许用户从终端更新这些值:

python3 main.py NB=10
python3 main.py NB=10 WIDTH_CANVAS=200 SIZE=50

或者什么都没有改变:

python3 main.py

所以我尝试了类似的方法:

import sys

SIZE = sys.argv[1]
NB = sys.argv[2]
WIDTH_CANVAS = sys.argv[3]

但问题是:例如,如果他们不想指定 NB 怎么办?

【问题讨论】:

标签: python python-3.x arguments argparse


【解决方案1】:

如果您想完全使用该语法,可能会使用您的默认值设置一个 dict。

value = {'NB': 100, 'SIZE': 100, 'WIDTH_CANVAS': 150}

for arg in sys.argv[1:]:
    if '=' in arg:
        k, v = arg.split('=', 1)
        if k not in value:
            raise KeyError('Invalid command-line argument %s' % k)
        value[k] = v
    else:
        raise MaybeGripe('Some other error here?')

现在继续使用 value['SIZE'],就像您之前使用的裸 SIZE 变量等一样。

正如 cmets 中所建议的,更常见的安排是使用命令行选项并使用标​​准 ArgParse module 来解析它们。也许你的语法看起来更像

python main.py --size 25 --canvas-width 100

这对大多数用户来说会更熟悉且不会分散注意力。

【讨论】:

  • 我相信 Unix dd 命令是用你建议的部分作为笑话的语法实现的。不幸的是,它卡住了,我们都发誓。
【解决方案2】:

argparse 正是您所需要的。这是一个简短的示例 (https://docs.python.org/3/library/argparse.html):

import argparse

SIZE = 100
NB = 100

parser = argparse.ArgumentParser()
parser.add_argument('--NB', dest='NB', type=int, default=NB)
parser.add_argument('--SIZE', dest='SIZE', type=int, default=SIZE)


args = parser.parse_args()


print(args.SIZE)
print(args.NB)

所以运行python prog.py --SIZE 3 你会得到:

3
100

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多