标签: argparse

python argparse - 带选项的可选append参数

我有一个脚本,我要求用户提供要执行的预定义操作的列表.我还希望能够在用户没有定义任何内容时采用特定的操作列表.然而,似乎试图将这两者结合在一起是不可能的.

当用户不提供参数时,他们会收到默认选项无效的错误

acts = ['clear','copy','dump','lock']
p = argparse.ArgumentParser()
p.add_argument('action', nargs='*', action='append', choices=acts, default=[['dump', 'clear']])
args = p.parse_args([])
>>> usage: [-h] [{clear,copy,dump,lock} [{clear,copy,dump,lock} ...]]
: error: argument action: invalid choice: [['dump', 'clear']] (choose from 'clear', 'copy', 'dump', 'lock')
Run Code Online (Sandbox Code Playgroud)

当它们确定一组动作时,结果命名空间将用户的动作附加到默认值,而不是替换默认值

acts = ['clear','copy','dump','lock']
p = argparse.ArgumentParser()
p.add_argument('action', nargs='*', action='append', choices=acts, default=[['dump', 'clear']])
args = p.parse_args(['lock'])
args
>>> Namespace(action=[['dump', 'clear'], ['dump']])
Run Code Online (Sandbox Code Playgroud)

python argparse

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

argparse帮助没有重复的ALLCAPS

我想为我的选项显示argparse帮助以同样的方式默认-h,--help并且-v,--version是,没有选项后ALLCAPS文本,或至少不重复的CAPS.

import argparse
p = argparse.ArgumentParser("a foo bar dustup")
p.add_argument('-i', '--ini', help="use alternate ini file")
print '\n', p.parse_args()
Run Code Online (Sandbox Code Playgroud)

这就是我目前得到的python foobar.py -h:

usage: a foo bar dustup [-h] [-i INI]

optional arguments:
  -h, --help            show this help message and exit
  -i INI, --ini INI     use alternate ini
Run Code Online (Sandbox Code Playgroud)

这就是我想要的:

usage: a foo bar dustup [-h] [-i INI]

optional arguments:
  -h, --help            show this help message and exit
  -i, --ini INI         use alternate …
Run Code Online (Sandbox Code Playgroud)

python argparse

17
推荐指数
2
解决办法
4984
查看次数

Python,argparse:如何使用type = str和type = int来使用nargs = 2

我花了一些时间在argparse文档上,但我仍然在为我的程序中的一个选项挣扎这个模块:

parser.add_argument("-r", "--rmsd", dest="rmsd", nargs=2,
    help="extract the poses that are close from a ref according RMSD",
    metavar=("ref","rmsd"))
Run Code Online (Sandbox Code Playgroud)

我想确切地说第一个参数是一个字符串(type = str)和必需的,而第二个参数是type = int,如果没有给出一个值,则默认值为1(假设默认值= 50).我知道当预期只有一个参数时如何做到这一点,但我不知道当nargs = 2时如何进行......这甚至可能吗?

非常感谢,

python argparse

17
推荐指数
3
解决办法
4万
查看次数

python使用argparse.ArgumentParser方法

我试图学习如何argparse.ArgumentParser工作,我为此写了几行:

global firstProduct
global secondProduct 
myparser=argparse.ArgumentParser(description='parser test')
myparser.add_argument("product1",help="enter product1",dest='product_1')
myparser.add_argument("product2",help="enter product2",dest='product_2')

args=myparser.parse_args()

firstProduct=args.product_1
secondProduct=args.product_2
Run Code Online (Sandbox Code Playgroud)

我只是想,当用户运行此脚本有两个参数我的代码并将其分配给firstProductsecondProduct分别.但它不起作用.有人告诉我为什么吗?提前致谢

python command-line argparse

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

如何将argparse参数传递给一个类

我对编码很陌生,特别是Python.我正在尝试学习如何将我创建的argparse参数传递给类以使用正确/推荐的方式.除了学习python之外,我还试图学习如何以OOP方式做事,以便学习其他OOP类型的语言变得更容易.

所以这是我想要做的一个示例:

import argparse

class passyourcliargstome():
    def __init__(self, whatdoiputheretogetmycliargs):
        #how do I get my cli args here?
        pass
    def otherfunctionsthatdothings():
        pass

if __name__ == '__main__':
    #grab the arguments when the script is ran
    parser = argparse.ArgumentParser(
         description='Make things happen.')
    parser.add_argument('-f', '--foo', action='store_true', default=False, help='here be dragons')
    parser.add_argument('-b', '--bar', action='store_true', default=False, help='here be more dragons')

    passyourcliargstome.otherfunctionsthatdothings()
Run Code Online (Sandbox Code Playgroud)

所以,我定义的主类之外argparse参数,并想知道如何让他们内部的类.这甚至是正确的方法吗?我应该在我的班级下制作一个argparse函数吗?

提前感谢您提供任何帮助,参考等.

编辑:美国东部时间11月16日2:18

注意:由于我没有足够的代表回答我自己的问题,这是我发布正确答案的唯一办法.

好吧,我花了一些时间,但我设法把它拼凑起来.RyPeck的答案帮助我获得了我的参数(我的代码遗漏了一些东西),但后来当我试图测试代码时,我得到了未绑定的方法错误.我不知道那是什么意思.我是否提到过我的屏幕名称?

它并没有真正点击,直到我发现读这个.这是我的工作代码.如果有人有任何要补充的内容,那么直到并且包括"你仍然做错了,这样做是正确的." 我听见了.在此期间,感谢您的帮助.

import argparse

class Passyourcliargstome(object):

    def __init__(self):
        #here's how I got my args here
        self.foo …
Run Code Online (Sandbox Code Playgroud)

python oop command-line arguments argparse

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

Python argparse dict arg

我想dict(str -> str)从命令行接收一个参数.不argparse.ArgumentParser提供呢?还是其他任何图书馆?

对于命令行:

program.py --dict d --key key1 --value val1 --key key2 --value val2
Run Code Online (Sandbox Code Playgroud)

我期待以下字典:

d = {"key1": "val1", "key2": "val2"}
Run Code Online (Sandbox Code Playgroud)

python dictionary argparse

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

在argparse中禁用/删除参数

是否可以删除或禁用argparse中的参数,以便它不会显示在帮助中?怎么样?

添加新参数很容易:

parser = argparse.ArgumentParser()
parser.add_argument('--arg1', help='Argument 1')
parser.add_argument('--arg2', help='A second one')
Run Code Online (Sandbox Code Playgroud)

我知道你可以通过指定"resolve"冲突处理程序来覆盖带有新定义的参数:

#In one script that should stand-alone and include arg1:

parser = argparse.ArgumentParser(conflict_handler='resolve')
parser.add_argument('--arg1', help='Argument 1')
parser.add_argument('--arg2', help='A second one')

#In another script with similar options
parser.add_argument('--arg1', help='New number 1')
Run Code Online (Sandbox Code Playgroud)

但这仍然包括帮助消息中的arg1和结果parse_args是否有类似的东西

#Wishful thinking
#In another script with similar options, that shouldn't include arg1
parser.remove_argument('--arg1')
Run Code Online (Sandbox Code Playgroud)

或者另一种合理简单的方法来实现这一目标?

另外:如果论证是位置论证,那么方法会不同吗?

注:排除故障arg1解析的建议后,这里是参数仍显示在帮助

python arguments argparse

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

使用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
查看次数

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
查看次数

如何使用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 ×10

python ×10

arguments ×2

command-line ×2

argv ×1

default-value ×1

dictionary ×1

oop ×1