python解析命令行参数的三种方法详解


Posted in Python onNovember 29, 2019

这篇文章主要介绍了python解析命令行参数的三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

python解析命令行参数主要有三种方法:sys.argv、argparse解析、getopt解析

方法一:sys.argv —— 命令行执行:python test_命令行传参.py 1,2,3 1000

# test_命令行传参.py
import sys 
def para_input():  
  print(len(sys.argv))   # 参数序列的长度,此时所有参数存放在一个list之中
  if len(sys.argv) < 2:    
    sys.exit("python error")  
  script_name = sys.argv[0] #第一个参数指的是脚本名称
  param_first = sys.argv[1] #第二个参数,此时也是一个str列表
  param_second = sys.argv[2] #第三个参数 
   
  print(script_name)
  print(type(script_name))
  print(param_first)
  print(type(param_first))
  
  sss = param_first.split(',')
  print(type(sss))
  print(sss[0])  #传进来的都是默认str
  print(sss[1])
  print(sss[2])
  
  print(param_second)
  print(type(param_second))
  print(script_name, param_first, param_second) 
if __name__ == "__main__":
  para_input()

python解析命令行参数的三种方法详解

方法二:argparse解析 —— 命令行执行:python test_命令行传参.py -n Peter 或者 python test_命令行传参.py -n Peter -d 20191120

# test_命令行传参.py
import argparse

parser = argparse.ArgumentParser('传入参数:***.py')
parser.add_argument('-n','--name', default='Jack')
parser.add_argument('-d','--date', default='20191128')
args = parser.parse_args()
print(args)
print(type(args))
name_ = args.name
date_ = args.date

print(type(name_))
print(type(date_))
print('the people %s said that the date is %s'%(name_, date_))

python解析命令行参数的三种方法详解

方法三:getopt解析 —— 命令行执行:python test_命令行传参.py -f 游泳 -p 20191130 或者 python test_命令行传参.py --functionname=游泳 -p 20191130 或者 python test_命令行传参.py --functionname=游泳 --partdate=20191130

格式为:getopt.getopt(argv, options[, long_options])

该方法有两种传参形式:短 ('-') 和长 ('--')

options表示的是短选项,传入时需用(例如 :-f )形式传入参数,其中,有冒号(:) 表示 -f 之后必须传入值构成(例如:-f value),没有冒号则不用。

[, long_options]表示的是长选项,传入时需用(例如 :--f )形式传入参数,其中,有等于号(=) 表示 --f 之后必须传入值构成(例如:--f=value),没有等于号则不用。

使用时可以长短混合,比如多个参数,有的用长选项,有的用短选项;在程序中设置默认值之后,还可以不用传全部参数

import getopt
import sys

def get_args_func(argv):
  functionname = '拍照' #默认值
  partdate = '20191128'
  
  try:
    opts, args = getopt.getopt(argv, "hf:p:", ["help", "functionname=", "partdate="]) 

 #表示参数选项有:-h, -f, -p, --help, --functionname, --partdate,它们相互对应;该方法的返回值有两个元素: 第一个是(opt, value)元组的列表,第二个是一般参数列表,包含那些没有 '-' 或 '--' 的参数
  except getopt.GetoptError:
    print('Error: ***.py -f <functionname> -p <partdate>')
    print('  or: ***.py --functionname=<functionname> --partdate=<partdate>')
    sys.exit(2)
  
  for opt, arg in opts:  #依次获取列表中的元组项
    if opt in ("-h", "--help"):
      print('***.py -f <functionname> -p <partdate>')
      print('or: ***.py --functionname=<functionname> --partdate=<partdate>')
      sys.exit()
    elif opt in ("-f", "--functionname"):
      functionname = arg
    elif opt in ("-p", "--partdate"):
      partdate = arg
  print('-----------------------------------------------------------------------')
  print(opts) #元组构成的列表
  print(args) #args指的是不用 '-'或 '--'传递的参数,这里没有传递,所以为空
  print('functionname为:', functionname)
  print('partdate为:', partdate)

if __name__ == '__main__':
  get_args_func(sys.argv[1:]) #因为sys.argv[0]是脚本名称

python解析命令行参数的三种方法详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
浅析Python中元祖、列表和字典的区别
Aug 17 Python
python语言中with as的用法使用详解
Feb 23 Python
pygame游戏之旅 游戏中添加显示文字
Nov 20 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
Mar 22 Python
详解Python装饰器
Mar 25 Python
Python正则表达式匹配和提取IP地址
Jun 06 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
python datetime处理时间小结
Apr 16 Python
Python类及获取对象属性方法解析
Jun 15 Python
全网最详细的PyCharm+Anaconda的安装过程图解
Jan 25 Python
Python 读取千万级数据自动写入 MySQL 数据库
Jun 28 Python
关于numpy中eye和identity的区别详解
Nov 29 #Python
python+Django+pycharm+mysql 搭建首个web项目详解
Nov 29 #Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
Nov 29 #Python
python jenkins 打包构建代码的示例代码
Nov 29 #Python
numpy创建单位矩阵和对角矩阵的实例
Nov 29 #Python
python中从for循环延申到推导式的具体使用
Nov 29 #Python
python 实现矩阵按对角线打印
Nov 29 #Python
You might like
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
PHP yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
实现复选框全选/全不选切换
2006/12/23 Javascript
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
重载toString实现JS HashMap分析
2011/03/13 Javascript
javascript继承之为什么要继承
2012/11/10 Javascript
Javascript Web Slider 焦点图示例源码
2013/10/10 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
浅谈React 服务器端渲染的使用
2018/05/08 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
Vue 中使用 typescript的方法详解
2020/02/17 Javascript
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
python多线程抓取天涯帖子内容示例
2014/04/03 Python
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
全面分析Python的优点和缺点
2018/02/07 Python
Python 变量的创建过程详解
2019/09/02 Python
Pytorch中膨胀卷积的用法详解
2020/01/07 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
精选干货:Java精选笔试题附答案
2014/01/18 面试题
高中化学教学反思
2014/01/13 职场文书
采购人员的个人自我评价
2014/01/16 职场文书
幼儿园招生广告
2014/03/19 职场文书
初中生操行评语大全
2014/04/24 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
nginx安装以及配置的详细过程记录
2021/09/15 Servers
Netty分布式客户端接入流程初始化源码分析
2022/03/25 Java/Android
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL