[英]Python default parameter if no command line arguments are passed
I'l like to build a program with this behaviour: 我想用这种行为来构建程序:
usage: sage 4ct.py [-h] (-r R | -i I | -p P) [-o O] 用法:鼠尾草4ct.py [-h](-r R | -i I | -p P)[-o O]
But if you don't give any parameter, I'd like to have "-r 100" as the default. 但是,如果您不提供任何参数,我希望将“ -r 100”作为默认值。
Is it possible? 可能吗?
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()
Just remove the required
argument of the add_mutually_exclusive_group
function call (or set it to False) and you're done: 只需删除
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)
As you can see, the random
option is defaulted to 100 even if: 正如你所看到的,
random
选项默认为即使100:
output
option is provided, which seems normal output
选项,这看起来很正常 random
is provided, which can be problematic. random
之外的选项,这可能会出现问题。 you will have to check in your code if random
is the only exclusive option which has a value before taking it in account. random
唯一具有值的独占选项,然后再考虑它。 This example also includes some tiny improvement to your option parser: 此示例还包括对选项解析器的一些微小改进:
nargs=1
in your options definitions which makes you retrieve a list of one value. nargs=1
,使您可以检索一个值的列表。 By removing it, you could retrieve directly the value. Give the following a try: 尝试以下操作:
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:])
Essentially you are checking if any commandline parameters are given at all, and if not, you append the desired -r 100
本质上,您正在检查是否有任何命令行参数,如果没有,则附加所需的
-r 100
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.