用optparse处理命令行参数
在编写程序的时候,经常需要设置一些选项,以便在用命令行运行程序时,可以自由的设置某些参数。今天学习了一下optparse,这个python下专门用来解释命令行的模块。
注:程序的主过程是一个高斯白噪声信号源,通过一个低通滤波器后,将结果显示在频谱分析仪上。低通滤波器的通带增益为1,通带频率为bw,过渡带宽为bw/10.0,衰减为80db。在这里,bw是我想在运行里用命令行来设置的,就用到了optparse。
optparse的使用分为三个步骤:
1、从optparse导入类OptionParser,并为它实例化一个对象;
2、调用OptionParser类的方法add_option()添加自定义的选项;
3、调用OptionParser类的parse_args()进行剖析,返回一个dict和一个list。
在我的程序中分别对应的是:
parser=OptionParser()
parser.add_option('-b','--bandwidth',dest='bw',action='store',type='int',default=5000,help='set the bandwidth')
(options,args)=parser.parse_args()
说明:
OptionParser.add_option有五个参数--action指存储方式,默认为stroe;type为设置值的类型; dest为存储的变量;default为默认值;help为帮助信息。
(options,args)中options是一个dict,args是一个list,分别存储我所设置的键值和其他参数。
以我程序的理解来说就是:当在命令行中用-b或者-bw后边跟一个整数num设置程序的带宽时,程序会将这个整数num赋给字典options中的键bw,即字典中的形式为{'bw':num,‘…’:…}。其他的参数则分别存储到序列args中了。
解析完命令行参数后,获得了要设置的带宽值bw(如果没有-b或者--bandwidth选项,那么bw就是默认值5000)。将这个参数再传递给滤波器的设计参数中
taps=firdes.low_pass_2(1,samp_rate,self.bw,self.bw/10.0,80),各设置的数值对应于low_pass_2(double gain, double sampling_freq, double cutoff_freq,double transition_width, double attenuation_dB,win_type window = WIN_HAMMING, double beta = 6.76) [后面两项为默认值,一般不用修改]。经过这样的设置后,再将源(需要加一个throttle)、低通滤波器和频谱仪连接起来,就可以显示出结果了。
在没有设置带宽的情况下,默认值为5000:
当用-b设置带宽为3000时的结果:
当然还可以用optparser.add_option添加更多的自定义选项来使程序运行更加灵活,optparse这个命令行解释器还是很方便的。通过这个程序不仅学习了optparse的使用,也接触了一些滤波器模块的设计与使用方法。