标签: argparse

使用nargs> 1的Python argparse类型和选择限制

标题基本概括了所有内容.如果我有大于1的nargs,有什么办法可以在解析的各个args上设置限制(例如选择/类型)吗?

这是一些示例代码:

parser = argparse.ArgumentParser()
parser.add_argument('-c', '--credits', nargs=2,
    help='number of credits required for a subject')
Run Code Online (Sandbox Code Playgroud)

对于-c参数,我需要指定一个主题以及需要多少学分.主题应限于预定义的主题列表,所需的学分数应为浮点数.

我可以用subparser做到这一点,但因为它已经是子命令的一部分,所以我真的不想让事情变得更复杂.

python argparse

16
推荐指数
2
解决办法
9167
查看次数

如何使用python的argparse与预定义的参数字符串?

我想使用pythons argparse模块来解析我的cli参数字符串.这适用于从终端传递的参数,但不适用于给定的字符串.

import argparse

parser = argparse.ArgumentParser(description='Argparse Test script')
parser.add_argument("param", help='some parameter')

argString = 'someTestFile'
print(argString)

args = parser.parse_args(argString)
Run Code Online (Sandbox Code Playgroud)

如果我运行此脚本,我得到此输出:

~/someTestFile
usage: argparsetest.py [-h] param
argparsetest.py: error: unrecognized arguments: o m e T e s t F i l e
Run Code Online (Sandbox Code Playgroud)

~/someTestFile以某种方式在转变o m e T e s t F i l e.如前所述,如果我从终端传递文件名,它就可以工作.

我可以想象,这与字符串编码有关.有人知道如何解决这个问题吗?

python argparse

16
推荐指数
4
解决办法
1万
查看次数

argparse:使用必需参数的值设置可选参数

使用Python的argparse,我想添加一个可选参数,如果没有给出,则获取另一个(强制)参数的值.

parser.add_argument('filename',
                    metavar = 'FILE',
                    type    = str,
                    help    = 'input file'
                    )

parser.add_argument('--extra-file', '-f',
                    metavar = 'ANOTHER_FILE',
                    type    = str,
                    default = ,
                    help    = 'complementary file (default: FILE)'
                    )
Run Code Online (Sandbox Code Playgroud)

我当然可以None在解析参数后手动检查,但是不是有更多的pythonic方法吗?

python default-value argparse

16
推荐指数
1
解决办法
7521
查看次数

覆盖默认的argparse -h行为

我有一个调用其插件的特定配置文件.可以将参数传递给这些插件.此配置文件还允许我在运行时调用任意命令.

插件使用了许多参数:其中一个是-h并且它不代表--help.现在,我的问题是我想调用我自己的Python脚本以及传递一些参数.我正在使用argparse,并希望与配置的其余部分保持一致,我创建了一个-h标志.令我惊讶的是,argparse只是给了我argparse.ArgumentError: argument -h/--help: conflicting option string(s): -h而不是自己创业.

有没有办法阻止这种情况发生?

我很清楚,大多数人都希望-h提供帮助,但这是我自己的脚本,我想我比argparse devs更清楚我想要使用标志.

python argparse

16
推荐指数
3
解决办法
7230
查看次数

argparse中的自定义'使用'功能?

是否可以添加自定义"使用"功能,而不是python argparse提供的默认用法消息.

示例代码:

parser = argparse.ArgumentParser(description='Sample argparse py')
parser.add_argument('-arg_1',type=int, custom_usage_funct('with_some_message'))
output = parser.parse_args()

def custom_usage_funct(str):
    print str
    print '''
       Usage: program.py
         [-a, Pass argument a]
         [-b, Pass argument b]
         [-c, Pass argument c]
         [-d, Pass argument d]
         comment
         more comment
        '''
Run Code Online (Sandbox Code Playgroud)

如果传递的参数是字符串值而不是整数,则程序应调用自定义使用函数,并显示错误消息"请提供整数值"

有效参数

program.py -arg_1 123
Run Code Online (Sandbox Code Playgroud)

无效的论点

program.py -arg_1 abc

       Please provide an integer value
       Usage: program.py
         [-a, Pass argument a]
         [-b, Pass argument b]
         [-c, Pass argument c]
         [-d, Pass argument d]
         comment
         more comment
Run Code Online (Sandbox Code Playgroud)

python argparse

16
推荐指数
2
解决办法
2万
查看次数

Python argparse:具有必需选项的互斥所需组

我正在尝试拥有一个必需的互斥组,其中包含一个必需参数.以下是我提供的代码

#!/usr/bin/python

import argparse
import sys

# Check for the option provided as part of arguments
def parseArgv():
    parser = argparse.ArgumentParser()
    group = parser.add_mutually_exclusive_group()
    group.add_argument("-v", "--verbose", choices=[1,2,3,4],
            help = "Increase verbosity")
    group.add_argument("-q", "--quiet", action="store_true", help = "Run quietly")
    name = parser.add_mutually_exclusive_group(required=True)
    name.add_argument("-n", "--name", help = "Name of the virtual machine")
    name.add_argument("-t", "--template", help = "Name of the template to use \
            for creating vm. If path is not provided then it will be looked \
            under template directory.")
    parser.add_argument("-s", "--save", …
Run Code Online (Sandbox Code Playgroud)

python python-2.7 argparse

16
推荐指数
1
解决办法
8922
查看次数

如何使用python argparse与sys.argv以外的args?

我一直在整个文档,似乎没有办法做到这一点,但是:

有没有办法将argparse与任何字符串列表一起使用,而不是仅使用sys.argv?

这是我的问题:我有一个看起来像这样的程序:

# This file is program1.py
import argparse

def main(argv):
    parser = argparse.ArgumentParser()
    # Do some argument parsing

if __name__ == '__main__':
    main(sys.argv)
Run Code Online (Sandbox Code Playgroud)

从命令行直接调用此程序时,此方法正常.但是,我有另一个python脚本,它使用不同的命令行参数运行此脚本的批处理版本,我正在使用这样:

import program1

arguments = ['arg1', 'arg2', 'arg3']
program1.main(arguments)
Run Code Online (Sandbox Code Playgroud)

我仍然希望能够解析参数,但argparse自动默认使用sys.argv而不是我给它的参数.有没有办法传入参数列表而不是使用sys.argv?

python argv argparse

16
推荐指数
2
解决办法
9896
查看次数

为什么在argparse中,'True'始终为'True'?

这是最简单的Python脚本,名为test.py:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--bool', default=True, type=bool, help='Bool type')
args = parser.parse_args()
print(args.bool)
Run Code Online (Sandbox Code Playgroud)

但是当我在命令行上运行此代码时:

python test.py --bool False
True
Run Code Online (Sandbox Code Playgroud)

而当我的代码读取时'--bool', default=False,argparse正确运行.

为什么?

python argparse

16
推荐指数
1
解决办法
3953
查看次数

不要在最后一个位置参数后解析选项

我正在编写ssh命令行客户端的包装器.在第一个位置参数之后command,所有其他选项也应被视为位置参数.

optparse,我相信这将完成disable_interspersed_args.

现在我有这样的事情:

parser = argparse.ArgumentParser()
parser.add_argument('--parallel', default=False, action='store_true')
# maybe allow no command? this would ssh interactively into each machine...
parser.add_argument('command', nargs='+')
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

但是如果选项作为命令的一部分传递(例如my_wrapper ls -l),则它们将被解释ArgumentParser为未知选项.error: unrecognized arguments: -l

如果我使用parse_known_args(),选项可能会不按顺序.

p = argparse.ArgumentParser()
p.add_argument('-a', action='store_true')
p.add_argument('command', nargs='+')
print(p.parse_known_args())

$ python3 bah.py -b ls -l -a
(Namespace(a=True, command=['ls']), ['-b', '-l'])
Run Code Online (Sandbox Code Playgroud)

在这里你可以看到-b之前的位置ls已经丢失,并且-a已经从命令中解析出来,这是不可取的.

我怎么能够:

  • 防止在某个点之后解析参数?
  • 禁用散布参数的解析?
  • 允许带有前缀的参数作为位置参数使用?

python argparse

15
推荐指数
2
解决办法
2930
查看次数

Python argparse - 如果没有给出参数,则使用默认的互斥组

我正在编写一个Python脚本来处理一个机器可读的文件,并输出一个包含在其中的数据的人类可读报告.
我想提供输出数据stdout (-s)(默认情况下)或txt (-t)或csv (-c)文件的选项.我希望有一个默认行为的开关,就像许多命令一样.

Usage:我而言,我希望看到类似的东西script [-s | -c | -t] input file,并且-s如果没有传递参数则成为默认值.

我目前有(相关的args,简而言之):

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument('-s', '--stdout', action='store_true')
group.add_argument('-c', '--csv', action='store_true')
group.add_argument('-t', '--txt', action='store_true')
args = parser.parse_args()

if not any((args.stdout, args.csv, args.txt)):
    args.stdout = True
Run Code Online (Sandbox Code Playgroud)

所以,如果没有的-s,-t-c设定,stdout (-s)被迫为True,就好像-s已经过去了.

有没有更好的方法来实现这一目标?或者由于某种原因,另一种方法是否会被视为"更好"?

注意:我使用的是Python 3.5.1/2,我并不担心与其他版本的兼容性,因为目前还没有计划与其他人共享此脚本.这只是为了让我的生活更轻松.

python argparse python-3.x

15
推荐指数
1
解决办法
4966
查看次数

标签 统计

argparse ×10

python ×10

argv ×1

default-value ×1

python-2.7 ×1

python-3.x ×1