Python默认参数(如果没有传递命令行参数)

2024-04-19 03:57:06 发布

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

我想用这种行为构建一个程序:

用法:鼠尾草4ct.py[-h](-r r |-i i |-p p)[-o o]

但是如果你不给任何参数,我希望使用“-r100”作为默认值。在

有可能吗?在

parser = argparse.ArgumentParser(description = '4ct args')

group_input = parser.add_mutually_exclusive_group(required = True)
group_input.add_argument("-r", "-random", help = "Random graph: dual of a triangulation of N vertices", nargs = 1, type = int, default = 100)
group_input.add_argument("-i", "-input", help = "Input edgelist filename (networkx)", nargs = 1)
group_input.add_argument("-p", "-planar", help = "Load a planar embedding of the graph G.faces() - Automatically saved at each run: input_planar_file.serialized", nargs = 1)
parser.add_argument("-o", "-output", help="Output edgelist filename (networkx)", nargs = 1, required = False)

args = parser.parse_args()

Tags: ofnetworkxaddparserinputgrouprequiredhelp
2条回答

只需删除add_mutually_exclusive_group函数调用的required参数(或将其设置为False),就完成了:

import argparse

parser = argparse.ArgumentParser(description = '4ct args')

group_input = parser.add_mutually_exclusive_group(required = False)
group_input.add_argument("-r", " random", help = "Random graph: dual of a triangulation of N vertices", type = int, default = 100)
group_input.add_argument("-i", " input", help = "Input edgelist filename (networkx)")
group_input.add_argument("-p", " planar", help = "Load a planar embedding of the graph G.faces() - Automatically saved at each run: input_planar_file.serialized")
parser.add_argument("-o", " output", help="Output edgelist filename (networkx)", required = False)

print(parser.parse_args())
# Namespace(input=None, output=None, planar=None, random=100)
print(parser.parse_args("-r 77".split()))
# Namespace(input=None, output=None, planar=None, random=77)
print(parser.parse_args("-o some/path".split()))
# Namespace(input=None, output='some/path', planar=None, random=100)
print(parser.parse_args("-i some/path".split()))
# Namespace(input='some/path', output=None, planar=None, random=100)
print(parser.parse_args("-i some/path -o some/other/path".split()))
# Namespace(input='some/path', output='some/other/path', planar=None, random=100)
print(parser.parse_args("-r 42 -o some/other/path".split()))
# Namespace(input=None, output='some/other/path', planar=None, random=42)

如您所见,random选项默认为100,即使:

  • 提供了output选项,这似乎很正常
  • 提供了一个来自互斥组而不是random的选项,这可能会有问题。如果random是唯一一个有值的独占选项,则必须在考虑它之前签入代码。在

此示例还包括对选项解析器的一些微小改进:

  • 使用带有两个破折号的长选项名(这是一种惯例,但它也允许argparse正确识别选项名)。在
  • 删除选项定义中的nargs=1,这将使您检索一个值的列表。通过删除它,可以直接检索值。在

请尝试以下操作:

import argparse
import sys

parser = argparse.ArgumentParser(description='4ct args')

group_input = parser.add_mutually_exclusive_group(required=True)
group_input.add_argument("-r", "-random", help="Random graph: dual of a triangulation of N vertices", nargs=1, type=int,             default=100)
group_input.add_argument("-i", "-input", help="Input edgelist filename (networkx)", nargs=1)
group_input.add_argument("-p", "-planar", help="Load a planar embedding of the graph G.faces() - Automatically saved at each run: input_planar_file.serialized",nargs=1)
parser.add_argument("-o", "-output", help="Output edgelist filename (networkx)", nargs=1, required=False)

if not sys.argv[1:]:
    sys.argv.extend(['-r', '100'])

args = parser.parse_args(sys.argv[1:])

实际上,您正在检查是否有任何命令行参数被给定,如果没有,则附加所需的-r 100

相关问题 更多 >