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

    我们平常工作或学习中使用python大部分都是在写脚本,那如何能使我们的脚本程序可以像Windows的cmd窗口和Linux的shell窗口一样,进行任何操作都是通过命令行呢?

    python中三个内建模块用于处理命令行参数:

      sys

      getopt

      optparse

      argparse

    一、sys命令行参数

    sys模块主要用于获取和Python解释器相关的信息,可在Python交互式解释器中先导入sys模块 import sys。通过内置函数dir()查询到模块内定义的所有名称,并以一个字符串列表的形式返回。

                                     

    sys.argv: 以列表的方式获取运行 Python 程序的命令行参数。其中 ,sys.argv[0] 通常指该 Python程序本身,sys.argv[1]代表第一个参数,sys.argv[2]代表第二个参数,以此类推。

    import sys
    
    def start(argv):
        print('程序名:',argv[0])
        print('第一个参数:',argv[1])
        print('第二个参数:',argv[2])
        print('第三个参数:',argv[3])
    
    if __name__ == '__main__':
        try:
            start(sys.argv[0:])
        except KeyboardInterrupt:
            print("interrupted by user, killing all threads...")
    

    二、getopt命令行参数

    getopt是对sys.argv获取的命令行参数进行二次处理。在运行程序时,可能需要根据不同的条件,输入不同的命令行选项来实现不同的功能,比如-u代表后面是用户,-p代表后面是密码。调用getopt.getopt()会返回两个列表,第一个列表赋值给opts,第二个列表赋值给args。

      opts:是 (选项, 选项值) 的元组为一个元素的列表。如果没有选项值为空字符串;

      args:存放没用选项单参数的列表。不属于格式信息的剩余的命令行参数;

    import sys,getopt
    
    opts, args = getopt.getopt(sys.argv[1:], "u:p:", ["file="])
    print("opts结果为:",opts)
    print("args结果为:",args)

    参数解释:使用 sys.argv[1:] 是为过滤第一个参数(第一个参数为Python程序本身) “u:p:” 为定义短格式选项(-)。这里的u和p为两个选项。“u:p:” 后面有 “:” 必须有选项值。

         [“file=”] 为定义长格式选项(--)。这里的 “=” 和上面的短格式选项中的 “:” 一样,后面必须有选项值。

    使用命令: python3 ./getoptdemo.py -u user -p password --file=123.txt 123456

    三、optparse命令行参数 

    optparse模块主要用来为脚本传递命令参数,采用预先定义好的选项来解析命令行参数,与getopt函数不同的是optparse可以自动生成帮助信息。

    import optparse
    
    usage = "python %prog -u/--user <target user> -p/--password <target password>"
    parser = optparse.OptionParser(usage)
    parser.add_option('-u', '--user',dest='User',type='string',help='target user', default='root')
    parser.add_option('-p', '--password',dest='Pwd',type='string',help='target password')
    options, args = parser.parse_args()
    
    print("options为:",options) print("用户名为", options.User) print("密码为", options.Pwd)
    print("args为:",args)

    使用命令:python3 .\optparsedemo.py -h

         python3 .\optparsedemo.py -u user -p password

    四、argparse命令行参数

    argparse是optparse模块的升级版,与optparse相比,argparse模块使用更加简单便捷。

    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument('-u', '--user', dest='User', type=str,default='root', help = 'target User')
    parser.add_argument('-s', '--sex', dest='Sex', type=str,choices=['男','女'],default='男', help = 'target Sex')
    parser.add_argument('-n', '--number', dest='Num',nargs=2,required=True, type=int, help = 'target Two Numbers')
    
    print(parser.parse_args())
    

    使用命令:python3 .\argparsedemo.py -h

         python3 .\argparsedemo.py -n 12 15 

    argparse.ArgumentParser().add_argument 参数:

      可以设置多个选项字符串,比如上面的 ‘-u’, ‘--user’ 这两个,用的时候任选其一;

      type用于检测命令行输入参数的数据类型是否符合要求,有 string、int、float等类型;

      dest=用于定义选项值存放的位置,作为后面的第一个字典(options)的键,值为命令输入的参数;

      help用于定义帮助信息;

      default设置默认值;

  • 相关阅读:
    再谈 Devstack(Rocky)
    记一次性能测试与优化经历
    Nova rebuild for boot from volume issue
    OpenStack RPM Sample 解析
    [Cinder] 存储 Qos
    Octavia Rocky UDP 负载均衡功能试验
    Keepalived + LVS-NAT 实现高可用四层 TCP/UDP 负载均衡器
    LVS 四层 TCP/UDP 负载均衡器
    集群的定义以及类别定义
    对程序员又了解了一些
  • 原文地址:https://www.cnblogs.com/xingyuyu/p/15747857.html
Copyright © 2011-2022 走看看