赞
赏
通过 getopt 获取 Python 命令行时,我们可以使用短命令行参数和长命令行参数的形式来指定命令行参数内容,并且可以根据参数名获取指定的命令行,使用该方法解析命令行比使用 sys.argv 要强大很多。
options, retargs = getopt.getopt(args, shortopts, longopts=[])
参数 | 描述 |
---|---|
args | 一般是 sys.argv[1:]。过滤掉sys.argv[0],它是执行脚本的名字,不算做命令行参数。 |
shortopts | 短格式分析串。例如:“hp:i:”,h 后面没有冒号,表示后面不带参数;p 和 i 后面带有冒号,表示后面带参数。 |
longopts | 长格式分析串列表。例如:[“help”, “ip=”, “port=”],help 后面没有等号,表示后面不带参数;ip 和 port 后面带冒号,表示后面带参数。 |
options | 返回值 options 是以 元组 为元素的列表,每个元组的形式为:(选项串, 附加参数),如:(’-i’, ‘192.168.0.1’) |
retargs | 返回值 retargs 是个 列表 ,其中的元素是那些不含 ‘-’ 或 ‘–’ 的参数。 |
使用 getopt 模块获取命令行
import sys
import getopt
print("嗨客网(www.haicoder.net)")
options, args = getopt.getopt(sys.argv[1:], "hP:i:", ["help", "ip=", "port="])
print("Options =", options)
print("Args =", args)
程序运行后,控制台输出如下:
使用 getopt 函数,第一个参数传入 sys.argv[1:] 表明,我们要获取的命令行参数的来源,使用切片的形式,过滤掉第一个参数,即程序文件本身。
第二个参数,表明我们要获取的命令行的短参数,其中 h 后面没有冒号,表明 h 参数是不带值的,P 和 i 都是带值的。
第三个参数,是长参数的列表,help 后面没有等于,表明 help 是不带值的,其他的两个都是有值的参数。
最后,我们打印出 getopt 的返回值,其中,options 表示我们输入的命令行的参数和对应的值,是一个元祖的列表形式。 args 是一个列表的形式,是没有使用长参数和短参数的命令行。
使用索引的形式可以获取指定索引的命令行参数
import sys
import getopt
print("嗨客网(www.haicoder.net)")
options, args = getopt.getopt(sys.argv[1:], "hP:i:", ["help", "ip=", "port="])
for option, value in options:
if option in ("-h", "--help"):
print("print help info")
if option in ("-i", "--ip"):
print("ip is: {0}".format(value))
if option in ("-P", "--port"):
print("port is: {0}".format(value))
程序运行后,控制台输出如下:
我们使用 for in 循环遍历 getopt 返回的 options 列表,可以获取每一个命令行参数的键以及其对应的值。
options, args = getopt.getopt(args, shortopts, longopts=[])