前言 在程序中一般都会用到命令行选项, 我们可以使用getopt 和getopt_long函数来解析命令行参数 getopt getopt主要用来处理短命令行选项, 例如....argv 是main函数中的传递的参数个数和内容, optstring用来指定可以处理哪些选项, 下面是optstring的一个示例: "a:bc" 该示例表明程序可以接受3个选项: -a -b -c,.../test -a aa -b -c 输出结果如下: option a: aa option b unknown option getopt_long getopt_long支持长选项的命令行解析,...= -1) { switch(c) { case 'n': printf("username is %s\n", optarg);...就相当于 getopt , flag 和 longindex都不起作用了. getopt_long 和 getopt_long_only 下面解释一下 getopt_long 和 getopt_long_only
1.getopt()函数 getopt函数用来解析命令行选项,声明所在头文件为: #include 函数原型如下: int getopt(int argc, char * const...; 支持-a选项,后面必须带有一个参数; 支持-b选项,后面必须带有一个参数; 支持-c选项,后面可以带参数,也可以不用带参数; 3....int ch; printf("初始值:optind = %d,opterr = %d\n", optind, opterr); while ((ch = getopt...(argc, argv, "vha:b:c::")) !...); break; } } } 使用gcc编译: gcc getopt_test.c -o getopt_test.o 单独测试每个选项
getopt处理以’-’开头的命令行参数,如optstring=”ab:c::d::”,命令行为getopt.exe -a -b host -ckeke -d haha 在这个命令行参数中,-a和-...不行stderr输出错误信息 while( (result = getopt(argc, argv, “ab:c::”)) !.../getopt –b option b:b ./getopt –c other option:c ./getopt –a other option :? ....getopt_long()中,optstring是一个字符串,表示可以接受的参数。例如,”a:b:cd”,表示可以接受的参数是a,b,c,d,其中,a和b参数后面 跟有更多的参数值。...optarg不需要定义,在getopt.h中已经有定义) 那么,如果命令行参数是-c,那么调用getopt_long()将返回字符’c’,而此时,optarg是null。
Getopt是一个专门设计来减轻命令行处理负担的库函数,主要用来分析命令行参数,不仅python语言中有getopt,C语言中也有getopt。下面主要来介绍python中getopt的使用方法。...2、模块说明 导入模块:import getopt 使用语法:getopt.getopt(args, options[, long_options]) 参数说明:options是单字符,long_options...表示字符串 返回结果:是一个list,每个list的项为(选项,值)的元组对 具体实例:#ping -c 12 -6 -s 1024 –help –size 1024 处理结果: getopt.getopt...(sys.argv[1:], ”c:s:6”, [“size=”,”help”]) [(‘-c’, ’12’), (‘-6’, ”), (‘-s’, ‘1024’), (“—help”,””), (“–...size”,”1024”)] c:表示是一个短选项,前面用’-‘表示,紧随着c之后的元素与c组成一个元组; 6:表示是一个短选项,前面用’-‘表示,与6组成元组的元素是空字符; help:表示是一个长选项
: 4 HAVE option: -c The argument of -c is 1234 对于这个过程会调用三次getopt()函数,和第一个输入一样,是找到选项-b和他的参数”test”,这时optind...的值为3,也就意味着,下一次的getopt()要从argv[3]开始搜索,所以第二次调用getopt()函数,找到选项-c和他的参数1234(选项和参数是连在一起的),由于-c1234写在一起,所以他两占一起占用...看例子: [dablelv@TENCENT64 ~/test/getopt]$ ./a.out zheng -b "test" han -c123 qing ..../a.out -b test -c123 zheng han qing 我们看到,被getopt挑出的选项和对应的参数都按顺序放在了数组的前面,而那些既不是选项又不是参数的会按顺序放在后面。...---- 参考文献 [1]getopt manual [2]getopt.百度百科 [3]Linux下getopt()函数的简单使用 [4]getopt_long.百度百科 [5]getopt_long
一.getopt 1.使用 getopt optstring options parameters optstring定义了命令行有效的选项字母,还定义了哪些选项字需要参数,需要参数的选项后面加:即可;...如果指定了一个不在optstring中的选项,默认情况下,getopt命令会产生一条错误消息,如果想要忽略,可以加上-q选项; getopt ab:cd -a -b test1 -cd test2 test3...while getopts :ab:c opt do case “$opt” in a)cmd1;; b)cmd2;with value $OPTARG;; c)cmd3; *);; esac
/usr/bin/env python import sys; import getopt; def usage(): print("Usage:%s [-a|-o|-c] [-...使用字典接受命令行的输入,然后再传送字典,可以使得命令行参数的接口更加健壮 >>> import getopt, sys >>> arg = '-a -b -c foo -d bar a1 a2' >>...> optlist, args = getopt.getopt( sys.argv[1:], 'abc:d:' ) >>> optlist [('-a', ''), ('-b', ''), ('-c',.../usr/bin/env python import sys; import getopt; def usage(): print("Usage:%s [-a|-o|-c] [-...长格式是在Linux下引入的。许多Linux程序都支持这两种格式。在Python中提供了getopt模块很好的实现了对这两种用法的支持,而且使用简单。
getopt函数 函数说明 getopt -- 解析命令的可选项 getopt只是一个简单的解析命令可选项的函数,只能进行简单的格式命令解析,格式如下: 对短选项的解析:cmd [-a][-b] 对短选项及短选项的参数解析...传入的’-‘开始的字符被解析为选项,getopt一次执行解析出一个option,如果循环执行,可以将argv中的全部option解析出来; 在getopt的执行中,每次进入都会更新optind变量,该变量指向下一个...argv参数; 如getopt返回-1,表示argv[]中的所有选项被解析出,optind指向第一个非选项的argument元素;这里要注意,在getopt执行过程中会将单独的argument交换到argv...(argc, argv, ":a:b::c")) !...break; case 'c': printf("option: %c, no argument\n", ret);
getopt模块用于抽出命令行选项和参数,也就是sys.argv。命令行选项使得程序的参数更加灵活。支持短选项模式和长选项模式。 ...e.g. python scriptname.py -f 'hello' --directory-prefix=/home -t --format 'a' 'b' import getopt... shortargs = 'f:t' longargs = ['directory-prefix=', 'format', '--f_long='] opts, args = getopt.getopt...( sys.argv[1:], shortargs, longargs ) getopt函数的格式是getopt.getopt ( [命令行参数列表], "短选项", [长选项列表] ) 短选项名后的冒号
c:: 选项 -c,带一个可选参数(非标准用法)。.../bin/bash OPTIONS=$(getopt -o ab:c -- "$@") if [ $?.../bin/bash OPTIONS=$(getopt -o ab:c --long alpha,beta:,gamma -- "$@") if [ $?...-beta) echo "Option beta with argument: $2" shift 2 ;; -c...(1) - Linux manual page - man7.org bash(1) - Linux manual page - man7.org
看例子 getopt -o ab::c: -- -a -bpara_for_b -c para_for_c 输出结果-a -b 'para_for_b' -c 'para_for_c' -- 该例中指定了一个无参数的...# 下面一句中 $@ 是shell脚本传入的参数 TEMP=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \ -n 'example.bash' -...--c-long) # c has an optional argument....case "$2" in "") echo "Option c, no argument"; shift 2 ;; *) echo "Option c, argument \`$2'" ; shift...两处引号均存在的输出 Option a Option c, no argument Option c, argument `more' Option b, argument ` very long '
getopt – 解析命令的可选项 【说明】 getopt 只是一个简单的解析命令可选项的函数,只能进行简单的格式命令解析,格式如下: 1、形如:cmd [-a][-b] //对短选项的解析; 2、...(argc, argv, ":a:b::c")) !...: c optind: 4 argv[0] ...."a:b::c")) !.../parse_cmdline argv[1] -x // 修改代码while ((ret = getopt(argc, argv, "+a:b::c")) !
看第21章时,介绍到了解析命令行的神器 getopt,了解了 linux 下处理通用命令行的方法。...下面是一个用来作验证的例子: getopt.c 1 #include "...../getopt -a -b -c -A 1 -B 2 -C 3 admin 123qwe got option [2]: 'a' ('') got option [3]: 'b' ('') got option.../getopt -a -b admin -c -A 1 -B 2 123qwe -C 3 got option [2]: 'a' ('') got option [3]: 'b' ('') got option.../getopt -a -b admin -c -A 1 -B 2 123qwe -C 3 got option [2]: 'a' ('') got option [3]: 'b' ('') got option
/a.out -a 123 -b 456 -c 789 -v c=getopt(argc,argv,"a:b:c:v?").../a.out [-a 123 -b 456 -c 789 -v] [wbyq@wbyq linux_c]$ ..../a.out -a 123 -b 456 -c 789 -v c=getopt_long(argc,argv,"a:b:c:v?".../a.out -a 123 -b 456 -c 789 -v c=getopt_long_only(argc,argv,"a:b:c:v?".../a.out [wbyq@wbyq linux_c]$ ./a.out -a 1234 当前的选项形参:a,值:1234 [wbyq@wbyq linux_c]$ .
在 PHP 中,当我们在获取命令行参数时,可以通过遍历$argv来获取,其实呢是有规范可循的,也就是 GNU C-style parser for command line options 。...长参数同样遵循上面::、:规则 php里面缺少结构体的支撑,相比c的长选项的配置更加简洁,但也缺少了长短选项的映射关系配置。...getopt.php -O=a.jpg array ( 'O' = 'a.jpg', ) php getopt.php -O a.jpg array ( 'O'..., 'V' = false, 'v' = 'vv', ) 上面例子中我的短参数和长参数是对应的,但是没有数据结构来表示他们的对应关系(在C里面有option结构体来做这个对应关系的管理),所以我们两个都传的话..., 'v' = 'vvV', ) 总结了这个GNU C command line options 使用的套路,命令使用起来就更溜了,不会懵逼为什么linux下各种工具使用的案例写法“千奇百怪”了。
2.补充说明 optstring中的指定的内容的意义(例如getopt(argc, argv, “ab:c:de::”);) 1.单个字符,表示选项,(如上例中的abcde各为一个选项) 2....(如上例中的b:c:) 3 单个字符后跟两个冒号,表示该选项后可以跟一个参数,也可以不跟。如果跟一个参数,参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。...s’\n",optarg); break; case 'b': printf("option b :b\n"); break; default: printf("other option :%c\...n",ch); } printf("optopt +%c\n",optopt); } return 0; } 执行 $..../getopt –b option b:b 执行 $./getopt –c other option:c 执行 $./getopt –a other option :? 执行 $.
第一步很简单,只需要: import getopt, sys 第二步处理方法如下(以Python 手册上的例子为例): try: opts, args = getopt.getopt...处理所使用的函数叫getopt() ,因为是直接使用import 导入的getopt 模块,所以要加上限定getopt 才可以。 2....7 print("Usage:%s [-a|-o|-c] [--help|--output] args...."...(sys.argv[1:], "ao:c", ["help", "output="]); 15 16 print("============ opts ==============...', 'out')] ============ args ================== ['file1', 't', 'file2', '-d'] -a ==> -o ==> aaa -c
长格式是在Linux下引入的。许多Linux程序都支持这两种格式。在Python中提供了getopt模块很好的实现了对这两种用法的支持,而且使用简单。...getopt, sys 第二步处理方法如下(以Python手册上的例子为例): try: opts, args = getopt.getopt(sys.argv[1:], “ho:...处理所使用的函数叫getopt(),因为是直接使用import导入的getopt模块,所以要加上限定getopt才可以。 2....(例子也采用手册的例子) http://docs.python.org/2/library/getopt.html 15.6.getopt— C-style parser for command line...:d:') >>> optlist [('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')] >>> args ['a1', 'a2'] Using
python 的 getopt 模块是一个简单实用的命令行参数解析模块。实现命令解析功能的为模块中的getopt 方法。下面主要介绍一下这个getopt方法的使用。...查看getopt 模块的帮助可以得到 getopt方法的所有解释。 ...getopt(args, shortopts, longopts=[]) getopt(args, options[, long_options]) -> opts, args ...getopt 方法的返回值解释: getopt 方法返回两个list 第一个list 以 [(option,value),(option,value)] 的形式表示命令好中定义的参数 第二个参数 也是以... = getopt.getopt(sys.argv[1:],"hp:u:",["help","port=","user="]) except getopt.GetoptError:
比如: $gcc getopt_test.c -o testopt getopt_test .c是非选项參数。-o是选项,testopt是-o选项的关联值。 依据Linux的惯例。...return 0; } 结果: X:\1.KEEP MOVING\3.C\MyCodes\GetOpt\Debug\GetOpt.exe: invalid option...— x 0:X:\1.KEEP MOVING\3.C\MyCodes\GetOpt\Debug\GetOpt.exe 1:arg1 2:-v 3:-V 4:2.1 5:-h...the optind = 7 0:X:\1.KEEP MOVING\3.C\MyCodes\GetOpt\Debug\GetOpt.exe 1:-v 2:-V 3:2.1 4:-h...c = getopt_long (argc, argv, short_options, long_options, NULL); // if (c =
领取专属 10元无门槛券
手把手带您无忧上云