运行程序时有时候要传入一些参数,如ls -a
,rm -rf *
等。
我们在写程序时该怎么正确获取这些程序运行时传递的参数嘞?在python中,是使用getopt标准库。
getopt库通常和sys.argv
配合使用——sys.argv
获取全部参数信息,getopt
库负责整理。
getopt
库只有2个方法:
getopt.getopt
getopt.gnu_getopt
和1个异常
getopt.GetoptError
其实还有一个异常
getopt.error
,但是它只是getopt.GetoptError
的同名属性,只是用作向后兼容罢了。可参照getopt官网的getopt.error异常
sys.argv
可以获得一个列表,它以空格为界,将命令行的所有指令拆分为列表的各个元素。
举个例子
python test.py -h -v --path=/home
sys.argv
输出就是
[‘test.py’, ‘-h’, ‘-v’, ‘–path=/home’]
注意第一个列表元素为程序名,后面才是各个参数
另外需要明确的是,我们的参数通常有2种
①短参数:如-h
-v
-p=/home
等
②长参数:如--help
,--version
,--path=/home
等
参数可有值可无值。
我们用getopt.getopt
抛砖引玉,getopt.gnu_getopt
也差不多其实。
getopt.getopt
的用法为getopt.getopt(args, shortopts, longopts=[])
其中args
和longopts[]
的数据类型都是列表,shortopts
的数据类型是字符串。
args
是程序的所有参数,如上面例子中的-h -v --path=/home
,所以通常用sys.argv[1:]
shortopts
是所有短选项直接连接成的字符串,如-h-v
longopts
是所有长选项组成的列表,如['help', 'version', 'path=']
返回值有两个,第1个是所有选项-值
组成的元组形成的列表,第二个是其他所有东西。
多说无益,看个例子吧
import getopt
import sys
opts, args = getopt.getopt(sys.argv[1:], '-h-v-p:', ['help', 'version', 'path='])
print("opts=", opts)
print("args=", args)
print(sys.argv)
for opt_name,opt_value in opts:
if opt_name in ('-h', '--help'):
print("### Help info")
if opt_name in ('-v', '--version'):
print("### Version is 0.1 ")
if opt_name in ('-p', '--path'):
path = opt_value
print("### Path is", path)
注意短参数后面跟
:
,长参数后面跟=
,是可以传入值的意思
在终端中执行
python test.py -h
opts= [('-h', '')]
args= []
['test.py', '-h']
### Help info
python test.py --help
opts= [('--help', '')]
args= []
['test.py', '--help']
### Help info
python test.py -v
opts= [('-v', '')]
args= []
['test.py', '-v']
### Version is 0.1
python test.py --version
opts= [('--version', '')]
args= []
['test.py', '--version']
### Version is 0.1
python test.py -p /home
opts= [('-p', '/home')]
args= []
['test.py', '-p', '/home']
### Path is /home
python test.py --path=/home
opts= [('--path', '/home')]
args= []
['test.py', '--path=/home']
### Path is /home
python test.py --path=/home -h -v
opts= [('--path', '/home'), ('-h', ''), ('-v', '')]
args= []
['test.py', '--path=/home', '-h', '-v']
### Path is /home
### Help info
### Version is 0.1
python test.py --path=/home -h -v foo bar=1
opts= [('--path', '/home'), ('-h', ''), ('-v', '')]
args= ['foo', 'bar=1']
['test.py', '--path=/home', '-h', '-v', 'foo', 'bar=1']
### Path is /home
### Help info
### Version is 0.1
参考文献:https://www.jianshu.com/p/a877e5b46b2d