Python开发-038_命令行参数

一般服务器都是linux操作系统并且是无图形界面的,所以进行任何操作都是通过命令行。一些命令行工具的使用能够大大简化代码脚本的维护成本,提升复用性,python提供的几种主流的参数解析工具来实现简单的功能Python中三个内建模块用于处理命令行参数:

sys
getopt
optparse
argparse

1 sys命令行参数

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

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("被用户中断,正在终止所有线程...")

输出结果:

python .\命令行参数\001_sys.py aa bb cc

执行程序名: .\命令行参数\001_sys.py
第一个参数: aa
第二个参数: bb
第三个参数: cc

2 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) # 带 -u -p --file 参数的放在此 (如果-没有的参数 会报错)
print("args输出结果为",args) # 不带参数的放在此

输出结果:

python .\命令行参数\002_getopt.py -u kinght -p admin --file=123.txt kkk zdb
opts输出结果为 [('-u', 'kinght'), ('-p', 'admin'), ('--file', '123.txt')]
args输出结果为 ['kkk', 'zdb']

使用 sys.argv[1:] 是为过滤第一个参数(第一个参数为Python程序本身)

  • "u:h" 为定义短格式选项(-)

    • 这里的h和u为两个选项
      • "h" 后面没有“:” 表示h这个选项没有选项值
      • "u:" 后面有“:”必须有选项值
  • [“help”, “file=”] 为定义长格式选项(--)。这里的 “=” 和上面的短格式选项中的 “:” 一样,后面必须有选项值。

案例:

import sys,getopt

def help():
    print('帮助信息')
    sys.exit() # 退出程序
def user(user):
    print('user:',user)
def passwd(password):
    print('passwd:',password)

def run(argv):
    try:
        opts,args = getopt.getopt(argv,"-u:-p:h",['file=','help'])
    except getopt.GetoptError: # 没有这个参数
        print('存在错误的参数')
        sys.exit() # 退出程序
    for opt,arg in opts:
        if opt == '-h' or opt == '--help':
            help()
        if opt == '-u':
            user(arg)
        if opt == '-p':
            passwd(arg)
        if opt == '--file':
            print(arg)


if __name__ == '__main__':
    try:
        run(sys.argv[1:])
    except Exception:
        print("程序运行中断....")

3 optparse命令行参数

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

import optparse

useage = '这是一个optparse的测试脚本'
parser = optparse.OptionParser(useage)
	# -u 短链接 --user 长链接 dest存放输入值 type输入类型校验 help提示信息 default默认值
parser.add_option('-u','--user',dest="User",type='string',help='user name',default='root')
parser.add_option('-p','--passwd',dest="passwd",type='string',help='user passwd')
options,args = parser.parse_args()

print(options.User) # 输出输入的值
print(options.passwd)

命令行参数:

optparse.OptionParser(usage).add_option()参数:
可以设置多个选项字符串,比如上面的 ‘-u’, ‘--user’ 这两个,用的时候任选其一;
dest=用于定义选项值存放的位置,作为后面的第一个字典(options)的键,值为命令输入的参数;
type用于检测命令行输入参数的数据类型是否符合要求,有 string、int、float等类型;
help用于定义帮助信息;
default设置默认值;

输出结果:

python .\命令行参数\004_optparse.py --help
Usage: 这是一个argparse的测试脚本

Options:
  -h, --help            show this help message and exit
  -u USER, --user=USER  user name
  -p PASSWD, --passwd=PASSWD
                        user passwd

4 argparse命令行参数

argparse是optparse模块的升级版,与optparse相比,argparse模块使用更加简单便捷,其使用效果如下图所示。相信未来argparse会逐渐替代optparse

argparse.ArgumentParser().add_argument 参数:
可以设置多个选项字符串,比如上面的 ‘-u’, ‘--user’ 这两个,用的时候任选其一;

type用于检测命令行输入参数的数据类型是否符合要求,有 string、int、float等类型;
dest=用于定义选项值存放的位置,作为后面的第一个字典(options)的键,值为命令输入的参数;
help用于定义帮助信息;
default设置默认值;

案例:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-u','--user',dest="user",type=str,help='user name',default='root')
parser.add_argument('-p','--passwd',dest="passwd",type=str,help='user passwd')
parser.add_argument('-s','--sex',dest='sex',type=str,choices=['男','女'],default='男',help='target sex')
    # choices 选项 选填 男女
parser.add_argument('-n','--namber',dest="Num",nargs=2,required=True,type=int,help='target Two number')
    # nargs = 2 必须要两个参数 required=True为不可省略,默认为可省略
print(parser.parse_args())
print(parser.parse_args().user) # 可以单独输出某一参数

Python开发-038_命令行参数
http://localhost:8080/archives/cWisVUMl
作者
kinght
发布于
2024年11月11日
更新于
2024年11月12日
许可协议