Python2.7的argparse为您提供了两个扩展点,您可以在其中控制命令行参数的解析方式:类型函数和操作类。从内置类型和Action来看,最佳实践似乎是类型函数应该包含验证/初始化代码,而Action应该关注将值存储到命名空间中。这种方法的问题是当您的类型检查代码有副作用时。考虑这个简单的例子:fromargparseimportArgumentParser,FileTypeargp=ArgumentParser()argp.add_argument('-o',type=FileType('w'),default='myprog.out')argp.parse_args(['-o
我想使用argparse来构建一个带有子命令的工具。可能的语法是/tool.pydownload--from1234--interval60/tool.pydownload--build1432/tool.pyclean--numbers10所以我想用argparse来实现:确保“--from”和“--interval”始终一起使用确保“--build”永远不会与其他参数一起使用但我没有找到将“--from”和“--internal”配对到一个组,然后使该组与“--build”互斥的方法。下面是我当前的代码,它只使“--from”和“--build”互斥。既不能确保“--from”和“
我需要在Python中动态创建参数列表。我创建了一个脚本来演示这一点,名为args.py,如下所示:#!/usr/bin/pythonimportargparseparser=argparse.ArgumentParser()parser.add_argument('-args_file',default='args.txt')withopen(parser.parse_args().args_file,'r')asf:args=f.readlines()forarginargs:parser.add_argument('-'+arg.strip())dynamic_args=pars
我的目标是使用argparse编写一个Python命令行实用程序,该实用程序具有多个命令,每个命令都有不同的所需输入集。我尝试通读文档、一些Google搜索和堆栈溢出,但找不到任何内容。我可以想到一些可能的解决方案,但它们很难看,需要手动处理帮助文档和验证。我怀疑这是一种常见的、有效的解决方案已经广为人知的问题,我只是缺少合适的术语来搜索它,或者它有点晦涩难懂以至于没有张贴在很多地方。我现在最好的想法是拥有一个位置参数,并且根据该输入的值以某种方式对一组附加参数有不同的要求。也许我会解析两次?举个例子,这是一个类似的案例:有一个位置参数,动物动物选项有猫、蜥蜴、鱼对于猫来说,爪子、mu
我有一堆Python脚本,它们使用通用代码读取不同类型的输入和写入输出文件。这些是化学结构文件。一些示例文件类型是.smi或.sdf。默认情况下,我希望其中一些脚本以“smi”文件格式输出数据,而其他脚本以“sdf”格式输出数据。是否可以覆盖从父解析器继承的参数的默认值?例如……#InheritedcodefilesParser=argparse.ArgumentParser(add_help=False)filesParser.add_argument('-o',dest='outformat',default="smi")#Scriptcodeparser=argparse.Arg
是否可以访问传递给参数的选择元组?如果是这样,我该怎么做例如如果我有parser=argparse.ArgumentParser(description='chooselocation')parser.add_argument("--location",choices=('here','there','anywhere'))args=parser.parse_args()我可以访问元组('here','there','anywhere')吗? 最佳答案 事实证明,parser.add_argument实际上返回了关联的Action。
在Python中,使用argparse,我希望输入参数采用可变数量的文件,例如:$myScript--aParameterfile1file2file3...fileN怎么做到的?parser.add_argument("--aParameter",nargs=????,type=str,help="Providealistoffilestoanalyze",default=None) 最佳答案 使用kwargnargs='+'。这就是它的全部内容。 关于Python:argparse获
我有一个包含parserA的对象A-一个argparse.ArgumentParser对象还有一个包含parserB的对象B-另一个argparse.ArgumentParser对象A包含对象B的一个实例,但是对象B的参数现在需要由对象A中的解析器解析(因为A是从命令行使用参数调用的对象,而不是B)有没有办法在Python对象A中写成:parserA+=B.parserB? 最佳答案 argparse是围绕对象开发的。除了一些常量和实用函数外,它都是类定义。该文档侧重于使用而不是类结构。但这可能有助于理解其中的一点。parser=a
有什么方法可以告诉argparse不要吃引号吗?例如,当我给出带引号的参数时,argparse仅将引号内的内容作为参数。我也想捕获引号(不必在命令行中转义它们。)pbsnodes-x|xmlparse-t"interactive-00"产生interactive-00我要"interactive-00" 最佳答案 我认为是shell吃掉了它们,所以python实际上永远不会看到它们。在命令行上转义它们可能是您唯一的选择。如果它是\"backslash\"风格的转义,你出于某种原因不喜欢,那么这种方式应该可以代替:pbsnodes-x
我想在ArgumentParser()的add_argument()中接受一个目录路径作为用户输入。到目前为止,我已经写了这个:importargparseparser=argparse.ArgumentParser()parser.add_argument('path',option=os.chdir(input("pasteherepathtobiog.txtfile:")),help='pastepathtobiog.txtfile')这个问题的理想解决方案是什么? 最佳答案 可以确保路径是一个有效的目录,例如:importa