Python命令行参数解析 argparse/getopt

一.getopt

import sys, getopt

opts, args = getopt.getopt(sys.argv[1:], '-a:', ['bb', 'dd='])
# 第一个参数一般为sys.argv[1:],这是因为argv[0]为脚本的路径;
# 第二个参数为短命令行参数;
# 第三个参数为长命令行参数;
for opt_name, opt_val in opts:
    print(opt_name, ':', opt_val)

目前遇到两个坑:短参数不能缺少;参数不止一个字母时,必须使用长参数。

二.argparse

import argparse

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="show example")
    parser.add_argument("-a", "--param_a", help="help of param_a", required=True)  # a参数必须给出
    parser.add_argument("-b", "--param_b", help="help of param_b", default=1, type=int,
                        choices=[0, 1])  # 默认值为1,取值范围为0和1
    exptypegroup = parser.add_mutually_exclusive_group()  # 表示下面参数r和l为互斥
    exptypegroup.add_argument("-r", help="remote mode")
    exptypegroup.add_argument("-l", "--local", help="local mode")
    ARGS = parser.parse_args(['-a','1']) # py文件中必须初始化一个参数
    print(ARGS.param_a)  # 如果有长参数必须用长参数取值,ARGS.a会提示a不存在;除非只有短参数,比如r参数
    print(ARGS.param_b)
    print(ARGS.r)
0