ArgParse Python模块:更改内置argumen的默认参数值

2024-10-01 17:36:09 发布

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

我有一堆Python脚本,它们使用公共代码来读取输入和编写不同类型的输出文件。在

这些是化学结构文件。一些示例文件类型是.smi或.sdf。在

默认情况下,我希望其中一些脚本以“smi”文件格式输出数据,而其他脚本以“sdf”格式输出数据。在

是否可以重写从父解析器继承的参数的默认值?在

例如。。。在

# Inherited code
filesParser = argparse.ArgumentParser(add_help=False)
filesParser.add_argument('-o', dest='outformat', default="smi")

# Script code
parser = argparse.ArgumentParser(description='inherts from filesParser', parents=[filesParser])
parser.add_argument('--foo')

# Something like...
# parser.outformat.default = "sdf"

args = parser.parse_args()

第一个帖子希望我的礼仪没问题。在

非常感谢, 戴夫


Tags: 文件数据脚本adddefaultparserargparseargs
2条回答

是(docs):

>>> parser.parse_args([])
Namespace(foo=None, outformat='smi')
>>> parser.set_defaults(outformat='sdf')
>>> parser.parse_args([])
Namespace(foo=None, outformat='sdf')

set_defaults可能是最简单的修复方法。在

但我认为值得一提的是,你可以直接改变一个动作的默认值

filesParser = argparse.ArgumentParser(add_help=False)
outaction=filesParser.add_argument('-o', dest='outformat', default="smi")
parser = argparse.ArgumentParser(description='inherts from filesParser', parents=[filesParser])
fooaction=parser.add_argument(' foo')
print fooaction.default
# None
print outaction.default
# 'smi'
outaction.default='sdf'
args=parser.parse_args()
print args
# Namespace(foo=None, outformat='sdf')

add_argument返回一个Action对象,其中包含您在参数中指定的所有信息。在这里,我将这些操作保存在变量outactionfooaction中。outaction.defaultparse_args使用的默认值。在

对于继承的代码,保存outaction链接可能会很尴尬(尽管可以在“parser.\u actions”列表中找到它)。所以让set_defaults为您做这项工作是有意义的。在

set_defaults的代码可能具有指导意义:

^{pr2}$

首先,它将新的默认值放入parser._defaults字典中,然后有条件地修改action.default属性(注意搜索parser._actions)。它必须同时做到这两个,因为在使用默认值时,action.default值优先于parser._defaults值。在

如果在交互式shell(例如Ipython)中运行这段代码,并且可以打印action和{}对象,那么这些细节将更有意义。关于使用“私有”属性的常见警告适用。在

相关问题 更多 >

    热门问题