Python的命令行参数
argparse、optparse、getopt ——解析Python传入的参数
三者都是pyrhon的内建模块,用来处理命令行参数。getopt只能简单处理 命令行参数;optparse功能强大,而且易于使用,可以方便地生成标准的、符合Unix/Posix 规范的命令行说明(但目前已被弃用);argparse 模块是基于 optparse 的,使用方法相似,从 sys.argv 中解析参数,可编写用户友好的命令行界面,自动生成帮助和使用信息,对于无效参数可产生相应的错误提示。
-
argparse
-
getopt 能解析带’-‘和’–'格式的参数
getopt.getopt(args,shortopts,longopts = []) # args是要解析的参数列表(不包括程序启动路径),通常是sys.argv[1:]。 # shortopts是脚本要识别的选项字母字符串,其中的选项需要一个参数,后接一个冒号。 # longopts(如果已指定)必须是包含应支持的长选项名称的字符串列表。 # '--'选项名称中不应包含前导字符。需要参数的长选项应后跟等号('=')。 # 不支持可选参数。要仅接受长选项,shortopts应该为空字符串。 import sys import getopt if __name__ == "__main__": try: # -h-i:-p:-t:-v 表示h,v两个不需要识别 opts, args = getopt.getopt(sys.argv[1:],"-h-i:-p:-t:-v", ["help", "ip=", "port=", "types=", "version"]) except getopt.GetoptError: print('test.py -h to help') exit(1) print(opts) # print(args) if not opts: print('test.py -h to help') exit(1) ip = None port = None types = None for opt, arg in opts: # 如果从命令行中接收的是h if opt in ('-h', '--help'): print('test.py -i <ip> -p <port> -t <m1|m2>') sys.exit(0) if opt in ("-i", "--ip"): ip = arg if opt in ("-p", "--port"): port = arg if opt in ("-t", "--types"): types = arg if opt in ("-v"): print("version 0.0.0.0") exit(1) print("master ip {}, port {}, type {}.".format(ip, port, types)) 执行: python test.py --ip=111 -p a 输出: [('--ip', '111'), ('-p', 'a')] master ip 111, port a, type None.
sys.argv[] ——python中参数传递方式
在Python中命令行参数通过sys.argv传递,它的类型是一个list类型,其中的元素为字符串
"""
在python中参数是sys.argv[1:],argv[0]是执行程序的名字
sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,所以那些试图从代码来说明它作用的解释一直没看明白。
因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,
所以才能用[]提取其中的元素。其第一个元素是程序本身,随后才依次是外部给予的参数
在用命令行执行代码时,a这个list中的第一值就是文件名本身,也就时示例中的test_delete.py
"""
# test_delete.py
import sys
a=sys.argv[0]
print(a)
# 打印结果:test_delete.py,如果python 运行时输入的绝对路径的话,也包括绝对路径
sys.argv[1:]
# 如果在IDE中执行python test_delete.py 1 2 3 4 5 6
# 打印结果:['1','2','3','4','5'] 是一个列表
# 在pycharm中运行时,在rn->Edit Configuartions->Paramaters栏中添加参数,以空格分隔
# 在CMD或者linux上就直接在后面添加就行,空格分隔参数