python argparse举例说明

目的:想从命令行通过命令来指定是否执行程序中的某个函数/模块

//memobio2015.u-strasbg.fr/conference/FICHIERS/Documentation/doc-python-pdf/howto-argparse.pdf)
关于另一个例子: https://blog.csdn.net/lyc_yongcai/article/details/73676930
这里只举例说明(原因是看了很多博文之后,还是没有解决笔者上面说的那个问题,即如何从命令行决定是否执行某段函数问题)

例1:

设定一个参数,名为foreground,简写f(即在终端可以输入–foreground也可以输入-f。跟自带的help很像,可以输入–help,也可以输入-h);现在要求,当foreground=True时,执行a+b,当等于false时执行a-b。

方法1

借助parser里面参数设定类型type默认是str,代码如下


import argparse

parser = argparse.ArgumentParser()
#这里加入的参数默认类型type是字符串,而我们输入的是字符串,所以不用写type=str
parser.add_argument("-f",'--foreground',default='True',choices=['True', 'False'])
args = parser.parse_args()

def add(a,b):
     if args.foreground=='True':
          return a+b
     else: return a-b

print(add(3,2))
     

我们默认情况下执行a+b,即default=‘True’
在这里插入图片描述
终端执行命令解释:
用python执行程序,先用-h来看有多少变量,发现有help(自带)和-f,其中-f可以取两个值,True和False, 并且-f的说明是input foreground components.

python test.py -h

由于我们默认-f是True,所以直接执行test.py得到5

python test.py

这和我们写-f True是一样的结果。最后我们写成False,发现执行的是a-b。

方法二

将类型type改为bool算符。这里有个问题,实际上argparse没有bool这种类型,只要出现不是空字符,bool就为真。因此实际上不能用这种方法,因为-f只要有输入,即不为空,就认为是真,但是可以从另一方面考虑,即先设定为false,这样默认运行假,即不运行真的部分,当输入True时则运行真的部分(如前所述,写false也会运行真)

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-f",'--foreground',default=False,
                    help="input foreground components")
args = parser.parse_args()

def add(a,b):
     if args.foreground:
          return a+b
     else: return a-b

print(add(3,2))
    

在这里插入图片描述

更新

vars()在argparse中的使用

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-Ap','--Add_prior',default='True', choices=['True','False'],
                    help='Whether to consider prior information, default=True')
parser.add_argument('-skyf','--sky_fraction',default='small',choices=['small','large'],
                    help='Choose a small(0.05)/large(0.7) sky fraction, default=small')
parser.add_argument('-r','--r',default=0.01,choices=['0','0.1','0.01'],
                    help='input tensor to scalar ratio, default=0.01')
parser.add_argument('-nu1',default=95,
                    help='input first frequency, default=95')
parser.add_argument('-nu2',default=150,
                    help='input second frequency, default=150')
args = parser.parse_args()

在这里插入图片描述
可见vars()是将args里的参数和参数值生成为一个字典

猜你喜欢

转载自blog.csdn.net/Mr_Cat123/article/details/90111055
今日推荐