博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
运维开发中内建模块getopt的最佳实践
阅读量:5845 次
发布时间:2019-06-18

本文共 2586 字,大约阅读时间需要 8 分钟。

hot3.png

简单介绍:

此模块提供命令行选项解析,目前支持短格式和长格式选项

 

快速安装:

说明:  内建模块无需安装

 

解析方法:

getopt(args, shortopts, longopts = []) -> (opts, args)

说明: args为要解析的参数序列,常为sys.argv[1:],shortopts为单字符选项定义串,如果某个选项需要一个参数,响应字母后面必须有一个冒号,longopts为长格式的选项名序列,可以包含多个字符,序列元素必须包含--前缀,如果此长选项需要参数则其名应包含后缀=,而且短格式和长格式可以在调用中结合使用,最终返回一个选项元组序列opts和非选项元组序列args

 

应用场景:

1.  规范化的程序目录结构及代码风格推荐我们程序配置从外部加载,不要写死,想想运维中nginx/等应用都是利用getopt解析命令行参数?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

#!/usr/bin/env python

# -*- coding: utf-8 -*-

"""

#

# Authors: limanman

# OsChina: http://xmdevops.blog.51cto.com/

# Purpose:

#

"""

# 说明: 导入公共模块

import os

import sys

import getopt

import ConfigParser

# 说明: 导入其它模块

 

program = __file__

version = '1.0.0.1'

 

 

# 说明: 显示使用说明

def show_usage_info():

    message = '''%s version: %s/%s

Usage: xmzoomeye-agent [-hv] [-c filename] [-l filename]

 

Options:

    -h      : this help

    -v      : show version and exit

    -c      : set running configuration file (default: docs/default.ini)

    -l      : set logging configuration file (default: docs/logging.ini)

''' % (program, program, version)

    print message

 

 

# 说明: 检测参数指定

def parameters_test():

    try:

        opts, args = getopt.getopt(sys.argv[1:], 'hvc:l:', [])

    except getopt.GetoptError, e:

        print '%s: %s' % (program, e)

        sys.exit()

 

    exit_flag = [000]

    for key, val in opts:

        if '-v' == key:

            print 'version: %s/%s' % (program, version)

            exit_flag[0= 1

        if '-h' == key:

            show_usage_info()

            exit_flag[0= 1

        if '-c' == key:

            exit_flag[1= 1

        if '-l' == key:

            exit_flag[2= 1

    if exit_flag[0]:

        sys.exit()

    if not all(exit_flag[1:]):

        print '%s: option -c/-l requires arguments' % (program,)

        sys.exit()

    return dict(opts)

 

 

# 说明: 检测配置文件

def configuration_test(opts):

    cf = {}

    cp = ConfigParser.ConfigParser()

 

    for opt, arg in opts.iteritems():

        if not os.path.exists(arg):

            print '%s: no such config file %s' % (program, arg)

            sys.exit()

 

    runconfig = os.path.abspath(opts['-c'])

    with open(runconfig, 'r+b') as handler:

        cp.readfp(handler, runconfig)

    sections = cp.sections()

    if 'redis' not in sections or 'agent' not in sections:

        print '%s: no redis and agent section' % (program,)

        sys.exit()

    for section in sections:

        if section not in cf:

            cf.setdefault(section, {})

            cf[section].update(cp.items(section))

    return cf

 

if __name__ == '__main__':

    pass

说明: 如上案例简单的利用getopt解析命令行参数,利用ConfigParser解析ini配置文件最终返回字典,方便主程序加载,而并没有在主程序中写死,这样更方便程序的单元代码编写和审查.

 

登录乐搏学院官网

或关注我们的官方微博,还有更多惊喜哦~

 

本文出自 “” 博客,请务必保留此出处

转载于:https://my.oschina.net/learnbo/blog/847528

你可能感兴趣的文章
UNIX字符转换程序
查看>>
SQL Server之备份和还原系统数据库
查看>>
Easyui NumberBox格式化展示
查看>>
批量修改Mysql数据库表MyISAM为InnoDB
查看>>
机房收费系统之余额查询
查看>>
cacti安装文档
查看>>
awk工具
查看>>
keepalived工作原理
查看>>
使用安全的Windows磁盘格式
查看>>
常见兼容性问题?
查看>>
一个重复try语句的实验
查看>>
Servlet进阶API
查看>>
我和ip_conntrack不得不说的一些事
查看>>
【web安全】跨站攻击思路整理
查看>>
数据库学习笔记-20170309
查看>>
机房收费系统之子窗体不显示问题
查看>>
疯狂ios讲义疯狂连载之显示动画
查看>>
对于大型数据库重新组织数据和生成索引进行维护的建议
查看>>
Windows Phone 7 Tips (8)
查看>>
Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和优势
查看>>