Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 读取命名命令参数_Python_Python 3.x_Arguments - Fatal编程技术网

Python 读取命名命令参数

Python 读取命名命令参数,python,python-3.x,arguments,Python,Python 3.x,Arguments,我可以使用argparse读取不需要按特定顺序排列的命名命令行参数吗?我浏览了,但大部分内容都集中在根据提供的参数显示内容上(例如--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 答案是肯定的。快速看一眼也能回答这个问题 这

我可以使用
argparse
读取不需要按特定顺序排列的命名命令行参数吗?我浏览了,但大部分内容都集中在根据提供的参数显示内容上(例如
--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


答案是肯定的。快速看一眼也能回答这个问题

这是一个非常简单的例子,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
通过阅读文档,您将发现许多其他功能;)

您可以这样使用:

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

Namespace(bar='bar-val', foo='foo-val')
['Untitled 14.py', '--bar=bar-val', '--foo', 'foo-val']
或者,如果用户也需要帮助,请执行以下操作:

 $ ./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

我想它可能会帮你做一个简单的

#! /usr/bin/python3                                                                                                                    
import sys                                                                                                                             
                                                                                                                                   
keys = ["--paramkey=","-p="]                                                                                                           
for i in range(1,len(sys.argv)):                                                                                                       
    for key in keys:                                                                                                                   
        if sys.argv[i].find(key) == 0:                                                                                                 
            print(f"The Given value is: {sys.argv[i][len(key):]}")                                                                     
            break   
运行:

输出:

The Given value is: paramvalue
The Given value is: pvalue 

找不到好的副本,但在这里查看一些示例:但是在脚本中,您不知道'pouet'作为arg值传递到第行
args=parser.parse_args(“--foo pouet.split())
,为什么要硬编码脚本应该读取的参数值,而不是读取命令提供的任何参数值?@两栖体这是一个示例,演示如何访问参数值。在一个真实的脚本中,您只需调用
parser.parse_args()
,而不带任何参数,它将使用
sys.args
列表加载args后如何读取
foo
的值?是否有类似
args.get('foo'))
?使用
args.bar
读取
--bar
,如果命令中未包含,则返回
None
。您也可以改用默认值。使用Python3.5.1,如果未包含,则不会返回
None
;它给出了一个错误。因此,作为另一种选择,
d=vars(args)
提供了一个字典(将命名参数映射到值)@MikhailV:只是为了显示在最后使用
print sys
进行处理之前命令行上的内容。
$ ./example.py --paramkey=paramvalue -p=pvalue
The Given value is: paramvalue
The Given value is: pvalue