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中运行并行任务技巧
Feb 26 Python
Python pickle模块用法实例
Apr 14 Python
python虚拟环境的安装配置图文教程
Oct 20 Python
Python微信公众号开发平台
Jan 25 Python
Django中的CBV和FBV示例介绍
Feb 25 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
Apr 24 Python
详解Pandas之容易让人混淆的行选择和列选择
Jul 10 Python
Django的用户模块与权限系统的示例代码
Jul 24 Python
Python实现图片添加文字
Nov 26 Python
Django 解决由save方法引发的错误
May 21 Python
如何利用Python动态模拟太阳系运转
Sep 04 Python
如何使用Django Admin管理后台导入CSV
Nov 06 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
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
2012/10/05 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
js小技巧--自动隐藏红叉叉
2007/08/13 Javascript
一个基于jquery的图片切换效果
2010/07/06 Javascript
Js判断CSS文件加载完毕的具体实现
2014/01/17 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
jQuery擦除插件eraser使用方法详解
2020/01/11 jQuery
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
js HTML DOM EventListener功能与用法实例分析
2020/04/27 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
Django自定义插件实现网站登录验证码功能
2017/04/19 Python
windows下python安装小白入门教程
2018/09/18 Python
django创建简单的页面响应实例教程
2019/09/06 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
2020/06/03 Python
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
allbeauty美国:英国在线美容店
2019/03/11 全球购物
香港彩色隐形眼镜在线商店:Stunninglens(全球免费送货)
2019/05/10 全球购物
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
学前教育教师求职自荐信
2013/09/22 职场文书
创业计划书——互联网商机
2014/01/12 职场文书
高中考试作弊检讨书
2014/01/14 职场文书
工作疏忽检讨书
2014/01/25 职场文书
俞敏洪一分钟演讲稿
2014/08/26 职场文书
个人党性分析总结
2015/03/05 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
python面向对象版学生信息管理系统
2021/06/24 Python
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis