读取命名命令参数

2024-04-25 22:42:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以使用argparse来读取不需要按特定顺序排列的命名命令行参数吗?我浏览了documentation,但大部分都集中在根据提供的参数显示内容(例如--h)。

现在,我的脚本读取有序的、未命名的参数:

myscript.py foo-val bar-val

使用sys.argv

foo = sys.argv[1]
bar = sys.argv[2]

但我想更改输入,以便通过命名参数不区分顺序:

myscript.py --bar=bar-val --foo=foo-val


Tags: 命令行py脚本内容参数foodocumentationsys
2条回答

您可以像这样使用Optional Arguments

import argparse, sys

parser=argparse.ArgumentParser()

parser.add_argument('--bar', help='Do the bar option')
parser.add_argument('--foo', help='Foo the program')

args=parser.parse_args()

print args
print sys

如果用./prog --bar=bar-val --foo foo-val调用它,它将打印:

Namespace(bar='bar-val', foo='foo-val')
['Untitled 14.py', '--bar=bar-val', '--foo', 'foo-val']

或者,如果用户也需要帮助argparse构建:

 $ ./prog -h
usage: Untitled 14.py [-h] [--bar BAR] [--foo FOO]

optional arguments:
  -h, --help  show this help message and exit
  --bar BAR   Do the bar option
  --foo FOO   Foo the program

答案是肯定的。快速看一下the argparse documentation也会有答案。

这里有一个非常简单的例子,argparse能够处理更具体的需求。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--foo', '-f', help="a random options", type= str)
parser.add_argument('--bar', '-b', help="a more random option", type= int, default= 0)

print(parser.format_help())
# usage: test_args_4.py [-h] [--foo FOO] [--bar BAR]
# 
# optional arguments:
#   -h, --help         show this help message and exit
#   --foo FOO, -f FOO  a random options
#   --bar BAR, -b BAR  a more random option

args = parser.parse_args("--foo pouet".split())
print(args)  # Namespace(bar=0, foo='pouet')
print(args.foo) # pouet
print(args.bar) # 0

当然,在真正的脚本中,您不会硬编码命令行选项,而是调用parser.parse_args()(不带参数)。它将使argparse接受sys.args列表作为命令行参数。

您可以这样调用此脚本:

test_args_4.py -h  # prints the help message
test_args_4.py -f pouet  # foo="pouet", bar=0 (default value)
test_args_4.py -b 42  # foo=None, bar=42
test_args_4.py -b 77 -f knock  # foo="knock", bar=77

通过阅读文档,您将发现许多其他功能;)

相关问题 更多 >