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 18 Python
Python守护进程用法实例分析
Jun 04 Python
举例讲解Python编程中对线程锁的使用
Jul 12 Python
使用python遍历指定城市的一周气温
Mar 31 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
Face++ API实现手势识别系统设计
Nov 21 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
python ipset管理 增删白名单的方法
Jan 14 Python
对python中的控制条件、循环和跳出详解
Jun 24 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
Jun 10 Python
python入门:argparse浅析 nargs='+'作用
Jul 12 Python
10个示例带你掌握python中的元组
Nov 23 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
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
PHP+RabbitMQ实现消息队列的完整代码
2019/03/20 PHP
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
JavaScript中exec函数用法实例分析
2015/06/08 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
2015/07/27 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
JS+CSS实现带有碰撞缓冲效果的竖向导航条代码
2015/09/15 Javascript
JS输出空格的简单实现方法
2016/09/08 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
手把手教你搭建ES6的开发运行环境
2017/07/11 Javascript
浅谈vue的iview列表table render函数设置DOM属性值的方法
2017/09/30 Javascript
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
Python中的二叉树查找算法模块使用指南
2014/07/04 Python
python服务器端收发请求的实现代码
2014/09/29 Python
python实现2048小游戏
2015/03/30 Python
Python统计文件中去重后uuid个数的方法
2015/07/30 Python
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
Python实现图片转字符画的示例代码
2017/08/21 Python
python hook监听事件详解
2018/10/25 Python
python 为什么说eval要慎用
2019/03/26 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
xml有哪些解析技术?区别是什么
2016/04/26 面试题
C++:局部变量能否和全局变量重名
2014/03/03 面试题
中间件分为哪几类
2016/09/18 面试题
药学专业大专生的自我评价
2013/12/12 职场文书
普通员工辞职信
2014/01/17 职场文书
致1500米运动员广播稿
2014/02/07 职场文书
出国留学计划书
2014/04/27 职场文书
上诉答辩状范文
2015/05/22 职场文书
机器人瓦力观后感
2015/06/12 职场文书