用的半生不熟的Linux环境,看看几种语言的命令行参数解析~
1. python
python demo.py -u tom -g users -o output.log --time-out 300
使用getopt.getopt()模块
import getopt
import sys
try:
args, opts = getopt.getopt(sys.argv[0], "u:g:o:", "time_out=")
except Exception as ex:
print(str(ex))
for key,value in opts:
if key == "-u":
username = value
elif key == "-g":
group = value
elif key == "-o":
log_file == value
elif key == "--time-out":
time_out = value
else:
print("Unrecognized parameter %s" % key)
非正式代码,忽略语法错误。。。
2. golang
使用flag包
package main
import (
"flag"
"fmt"
)
func main(){
var src string
var memo string
var level int
//定义flag参数
flag.StringVar(&src, "src", "", "source file")
flag.IntVar(&level, "level", 3, "debug level")
flag.StringVar(&memo, "memo", "", "the memory")
//解析
flag.Parse()
//显示帮助信息
flag.Usage()
fmt.Printf("src=%s, level=%d, memory=%s\n", src, level, memo)
}
go run args.go -level 1 -memo 256 -src source
-level int
debug level
-memo string
the memoey
-src string
source file
src=source, level=1, memory=256
3. shell
sh hello.sh a b c d e f
参数解析:
${0} --> hello.sh
${1} --> a
${2} --> c
${3} --> d
${4} --> e
${5} --> f
shell脚本的参数解析,直接获取参数位置使用即可...
notice: 获取参数位置时请加上{} 当参数的数量到2位数时, $10 ---> $1 拼接 0,这样就会获取错误的参数啦!!!
4. C
第一种:
main(int argc,char *argv[ ])
1.argc为整数
2.argv为指针的指针(可理解为:char **argv or: char *argv[] or: char argv[][] ,argv是一个指针数组)
注:main()括号内是固定的写法。
#include <stdio.h>
int main(int argc, char **args) {
int i = 0;
printf("%d\n", argc);
for (i = 0; i < argc; ++i) {
printf("%s\n", args[i]);
}
return 0;
}
执行:./test 1 2 3
4
./test
1
2
3
第二种:
头文件 #include <unistd.h>
定义函数:int getopt(int argc, char * const argv[], const char * optstring);
函数说明:getopt()用来分析命令行参数。
1、参数argc 和argv 是由main()传递的参数个数和内容。
2、参数optstring 则代表欲处理的选项字符串。
此函数会返回在argv 中下一个的选项字母,此字母会对应参数optstring 中的字母。
如果选项字符串里的字母后接着冒号":",则表示还有相关的参数,全域变量optarg 即会指向此额外参数。
如果getopt()找不到符合的参数则会印出错信息,并将全域变量optopt 设为"?"字符, 如果不希望getopt()印出错信息,则只要将全域变量opterr 设为0 即可。
返回值:如果找到符合的参数则返回此参数字母, 如果参数不包含在参数optstring 的选项字母则返回"?"字符,分析结束则返回-1.
范例
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
int ch;
opterr = 0;
while((ch = getopt(argc, argv, "a:bcde")) != -1)
switch(ch)
{
case 'a':
printf("option a:'%s'\n", optarg); break;
case 'b':
printf("option b :b\n"); break;
default:
printf("other option :%c\n", ch);
}
printf("optopt +%c\n", optopt);
}
执行:
$. /getopt -b
option b:b
$. /getopt -c
other option:c
$. /getopt -a
other option :?
$. /getopt -a12345
option a:'12345'
哈哈:平常工作只用python,shell,go和C的命令行参数解析纯属好奇,也了解下~~~
网友评论