-
Notifications
You must be signed in to change notification settings - Fork 12
python & shell 的帮助文档(可选参数)
Shuang0420 edited this page Jun 30, 2016
·
2 revisions
汇总之前两篇
用法示例:
parser = argparse.ArgumentParser() parser.add_argument('-input', action='store', dest='inp', default='', help='original input file name') parser.add_argument('-output', action='store', dest='output', default='', help='output model name') args = parser.parse_args() inp = args.inp output = args.output
usage () { echo 'Usage : ' echo '-s ' echo '-c ' echo '-f ' echo '-o ' echo '-a ' echo '-h ' exit }
while getopts ":c:f:o:s:h" opt do case $opt in c ) category=$OPTARG;; f ) file=$OPTARG;; o ) output=$OPTARG;; h ) usage;; s ) spider=$OPTARG;; ? ) echo "error" exit 1;; esac done
if [ ! $category ] && [ ! $file ]; then echo 'Please identify the input' usage fi if [ ! $output ]; then output='output.json' fi
- getopts后面的字符串就是可以使用的选项列表,每个字母代表一个选项。
- 后面带:的意味着选项除了定义本身之外,还会带上一个参数作为选项的值,比如d:在实际的使用中就会对应-d 30,选项的值就是30;
- getopts字符串中没有跟随:的是开关型选项,不需要再指定值,相当于true/false,只要带了这个参数就是true。
- 如果命令行中包含了没有在getopts列表中的选项,会有警告信息,如果在整个getopts字符串前面也加上个:,就能消除警告信息了。
使用getopts识别出各个选项之后,就可以配合case来进行相应的操作了。操作中有两个相对固定的“常量”,一个是OPTARG,用来取当前选项的值,另外一个是OPTIND,代表当前选项在参数列表中的位移。注意case中的最后一个选择──?,代表这如果出现了不认识的选项,所进行的操作。
选项参数识别完成之后,如果要取剩余的其它命令行参数,可以使用shift把选项参数抹去,就像例子里面的那样,对整个参数列表进行左移操作,最左边的参数就丢失了(已经用case判断并进行了处理,不再需要了),位移的长度正好是刚才case循环完毕之后的OPTIND - 1,因为参数从1开始编号,选项处理完毕之后,正好指向剩余其它参数的第一个。在这里还要知道,getopts在处理参数的时候,处理一个开关型选项,OPTIND加1,处理一个带值的选项参数,OPTIND则会加2。
- 选项参数的格式必须是-d val,而不能是中间没有空格的-dval。
- 所有选项参数必须写在其它参数的前面,因为getopts是从命令行前面开始处理,遇到非-开头的参数,或者选项参数结束标记--就中止了,如果中间遇到非选项的命令行参数,后面的选项参数就都取不到了。
- 不支持长选项, 也就是--debug之类的选项
[[TOC]]