星@语的博客




李白《侠客行》 银鞍照白马,飒沓如流星。十步杀一人,千里不留行。事了拂衣去,深藏身与名。

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设置默认值;

 

posted @ 2021-12-30 10:50  星_语  阅读(2710)  评论(0编辑  收藏  举报