一、sys模块
sys模块可以获取命令行参数。通过sys.argv可以访问所有命令行参数,返回值是包含所有命令行参数的列表。列表各元素意义如下:
参数1(脚本名): sys.argv[0]
参数2: sys.argv[1]
参数3: sys.argv[2]
...
参数n: sys.argv[n-1]
案例如下:
import sysdef get_command_argv_by_sys():print('参数个数: ', len(sys.argv))print('参数内容: ', str(sys.argv))print('第 1 个参数(脚本名): ', sys.argv[0])for i in range(1, len(sys.argv)):print('第 %s 个参数: %s' % (i+1, sys.argv[i]))if __name__ == "__main__":get_command_argv_by_sys()
不传入命令行参数,结果:
传入多个命令行参数,结果:
二、getopt模块
通过getopt.getopt方法可以以 "-i" 或 "--ip" 的形式获取命令行参数,方法详解入下:
options, args = getopt.getopt(args, shortopts, longopts=[])参数 args : 一般是sys.argv[1:]。过滤sys.argv[0],因为它是执行脚本的名字,不做命令行参数
参数 shortopts : 短格式分析串。编写方法示例 "hi:p:",h后面没冒号,表示后不带参数。i和p后带有冒号,表示后面带参数
参数 longopts : 长格式分析串列表。编写方法示例:["help", "ip=", "port="],help后没等号,表示后不带参数。ip和port后面带冒号,表示后面带参数返回值options : 含'-'或'--'的参数,以元组为元素的列表。元组的形式为(选项串, 附加参数),如('-i', '192.168.0.1')
返回值args : 不含'-'或'--'的参数,列表
通过异常可以处理输入异常:
Exception getopt.GetoptError
案例如下:
import os
import sys
import getoptdef get_command_argv_by_getopt():ip = ""port = ""file_name = os.path.basename(__file__)# 获取 命令行参数try:# sys.argv[1:]为要处理的参数列表,其中sys.argv[0]为脚本名,用sys.argv[1:]过滤掉脚本名opts, args = getopt.getopt(sys.argv[1:], "hi:p:", ["help", "ip=", "port="])except getopt.GetoptError:print('Error: ' + file_name + ' -i <ip> -p <port>')print(' or: ' + file_name + ' --ip=<ip> --port=<port>')sys.exit(2)# 处理 含'-'或'--'的命令行输入参数for opt, arg in opts:# 输入 -h 或 --help 返回帮助文档if opt in ("-h", "--help"):print(file_name + '-i <ip> -p <port>')print('or: ' + file_name + ' --ip=<ip> --port=<port>')sys.exit()# 输入 -i 或 --ip 获取对应ip值elif opt in ("-i", "--ip"):ip = arg# 输入 -p 或 --port 获取对应ip值elif opt in ("-p", "--port"):port = argprint('输入的ip为 : ', ip)print('输入的port为 : ', port)# 处理 不含'-'或'--'的命令行输入参数for i in range(0, len(args)):print('其他参数 %s 为 : %s' % (i + 1, args[i]))if __name__ == "__main__":get_command_argv_by_getopt()
不传入参数:
传入 --help 或 -h 参数:
使用短格式选项,传递参数:
使用长格式选项,传递参数:
传入多个参数: