zoukankan      html  css  js  c++  java
  • 命令行参数

    解析命令行参数有两种方法,分别为sys.argv模块和optparse模块。

    一、命令行参数sys.argv

    sys模块的sys.argv中,sys.argv[0]为脚本名称,sys.argv[1]为第一个参数,代码示例:

    import sys
    print(len(sys.argv))
    
    for arg in sys.argv:
    print(arg)
    
    执行这段代码的过程:
    $ python3 argtest.py hello world
    3
    argtest.py
    hello
    world

    循环打印每一个参数,第一个为sys.argv[0]就是运行的程序文件,从sys.argv[1]开始才是程序的参数。

    二、命令行参数optparse

    比sys.argv更强大的optparse模块。

    当我们要利用server与client进行FTP文件传输的时候,在client端往往需要输入诸如 -s 10.10.10.1 -p 9001这样的信息,当然我们不能控制用户的输入,如果用户随意的输入错误的命令,比如不写IP地址,只是写-s -p 9001,或者只写 -s -p。我们如果还用sys.argv获取参数的话需要做很多麻烦的逻辑判断,这给我们开发程序带来了很大的不便。

    但是如果我们利用optparse会十分便捷的解决这样的问题。

    optparse的用法如下:

    首先import optparse类,然后创建optparse对象parser,再使用add_option()来定义命令行参数,最后使用parse_args()来解析命令行。

    import optparse
    parser = optparse.OptionParser()
    parser.add_option("-s", "--server", dest="server", help="ftp server ip_address")
    parser.add_option("-P", "--port", type="int", dest="port", help="ftp server port")
    parser.add_option("-u", "--username", dest="username", help="username info")
    parser.add_option("-p", "--password", dest="password", help="password info") 
      
    
    import optparse
    usage = "usage: %prog [options] arg1 arg2" 
    parser = optparse.OptionParser(usage=usage) 
    parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=True, help="make lots of noise [default]") 
    parser.add_option("-q", "--quiet", action="store_false", dest="verbose",help="be vewwy quiet (I'm hunting wabbits)") 
    parser.add_option("-f", "--filename", metavar="FILE", help="write output to FILE"), 
    parser.add_option("-m", "--mode",default="intermediate", help="interaction mode: novice, intermediate, " "or expert [default: %default]")
    
    usage = "usage: %prog [options] arg1 arg2" #这行信息会优先打印在程序的选项信息前。当中的 %prog,optparse 会以当前程序名的字符串来替代:如 os.path.basename.(sys.argv[0])。
    
    #如果用户没有提供自定义的使用方法信息,optparse 会默认使用: “usage: %prog [options]”。

    例子1:

    我们新建一个test.py文件,代码如下

    import optparse
    
    class My_opt:
    
    def __init__(self):
    #初始化
    parser = optparse.OptionParser()
    parser.add_option("-s", "--server", dest="server", help="ftp server ip_address")
    parser.add_option("-P", "--port", type="int", dest="port", help="ftp server port")
    parser.add_option("-u", "--username", dest="username", help="username info")
    parser.add_option("-p", "--password", dest="password", help="password info")
    #解析参数
    self.options, self.args = parser.parse_args()
    print(self.options,self.args)
    
    
    if __name__ == '__main__':
    my_opt = My_opt()

    self.options类型是<class 'optparse.Values'>,形式上类似一个字典,保存用户输入的正确的参数信息

    例如用户执行脚本文件test.py -s 1.1.1.1 -P 9001 -u admin -p 123,
    则self.options={'server':'1.1.1.1','port':'9001','username':'admin','password':'123'}

    可以通过.方法获取里面的值,例如
    server = my_opt.server
    port = my_opt.port

    self.args是一个列表,保存的是用户输入的其他错误参数
    例如用户执行脚本文件test.py -s A 1.1.1.1 -P 9001 -u admin -p 123 B,则self.args=['A','B']

    例子2:

    打印用户输入的内容

    test.py
    # -*- coding: utf-8 -*-
    
    import optparse
    parser = optparse.OptionParser('usage %prog –t <打印内容>')
    parser.add_option('-t', dest='text', type='string', help='输入要打印的内容')
    options, args = parser.parse_args()
    text = options.text
    
    print(text)

    运行脚本:
    test.py -t 打印内容

    如果想要看打印帮助信息,可以加参数-h

    E:	est>python test.py -h
    Usage: usage test.py –t <打印内容>
    
    Options:
    -h, --help show this help message and exit
    -t TEXT 输入要打印的内容
  • 相关阅读:
    PHP之简单实现MVC框架
    socket泄露的问题
    gdb 调试多线程
    MMAP和DIRECT IO区别
    三年回首:C基础
    定时器管理:nginx的红黑树和libevent的堆
    strsep和strtok_r替代strtok
    缓存穿透和缓存失效
    mmap为什么比read/write快(兼论buffercache和pagecache)
    B+Tree和MySQL索引分析
  • 原文地址:https://www.cnblogs.com/dxnui119/p/13226253.html
Copyright © 2011-2022 走看看