python获取命令行传参的两种种常用方法argparse解析getopt 模块解析

方法一:argparse解析

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#  @Time: 2020/5/20 10:38
#  @Author:zhangmingda
#  @File: argparse_test.py
#  @Software: PyCharm
#  Description:
import argparse

parser = argparse.ArgumentParser("指定监听端口")
parser.add_argument('-p', '--port', default=80)
args = parser.parse_args()
print("获取命令行传参")
port = args.port
print("port=",port)

  

 

 

方法二: getopt 模块解析,可以自定义错误提示

格式为:getopt.getopt(argv, options[, long_options])

argv为命令传入的参数列表,也就是sys.argv[1:]

该方法有两种传参形式:短 ('-') 和长 ('--')

options表示的是短选项,传入时需用(例如 :-f )形式传入参数,其中,有冒号(:) 表示 -f 之后必须传入值构成(例如:-f value),没有冒号则不用。

[, long_options]表示的是长选项,传入时需用(例如 :--f )形式传入参数,其中,有等于号(=) 表示 --f 之后必须传入值构成(例如:--f=value),没有等于号则不用。

使用时可以长短混合,比如多个参数,有的用长选项,有的用短选项;在程序中设置默认值之后,还可以不用传全部参数

  示例:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#  @Time: 2020/5/19 18:12
#  @Author:zhangmingda
#  @File: getopt_test.py
#  @Software: PyCharm
#  Description:

import getopt
import sys

def get_args_func(argv):
    port = '80'  # 默认值
    try:
        opts, args = getopt.getopt(argv, "hp::", ["help", "port="])
    # 表示参数选项有:-h/ --help -p/ --port,
    # 它们相互对应;该方法的返回值有两个元素: 第一个是(opt, value)元组的列表,第二个是一般参数列表,包含那些没有 '-' 或 '--' 的参数
    except getopt.GetoptError:
        # 获取到非指定的- 或者长选项--的参数给出正确提示
        print('GetoptError: python %s -p <port> ' % sys.argv[0])
        print('  GetoptError: python %s --port=<port>' % sys.argv[0] )
        sys.exit(2)
    for opt, value in opts:  # 依次获取列表中的元组项
        if opt in ("-h", "--help"):
            print(' USAGE: %s -p <port> ')
            print('or: %s --port=<port>')
            sys.exit(0)
        elif opt in ('-p','--port'):
            port = value
    print('-----------------------------------------------------------------------')
    print("get option -p or --port:",port)
    print("get other option ",args)

if __name__ == '__main__':
    get_args_func(sys.argv[1:])  # 因为sys.argv[0]是脚本名称,从第一位获取到最后

  

 

posted on 2020-05-20 11:01  zhangmingda  阅读(2574)  评论(0编辑  收藏  举报

导航