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模块学习 re 正则表达式
May 19 Python
python绘图库Matplotlib的安装
Jul 03 Python
基于python编写的微博应用
Oct 17 Python
浅析python中的分片与截断序列
Aug 09 Python
详谈在flask中使用jsonify和json.dumps的区别
Mar 26 Python
用python一行代码得到数组中某个元素的个数方法
Jan 28 Python
Appium+python自动化怎么查看程序所占端口号和IP
Jun 14 Python
python 的 scapy库,实现网卡收发包的例子
Jul 23 Python
关于Python形参打包与解包小技巧分享
Aug 24 Python
在python中修改.properties文件的操作
Apr 08 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
Feb 02 Python
python小型的音频操作库mp3Play
Apr 24 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 function用法如何递归及return和echo区别
2014/03/07 PHP
CCPry JS类库 代码
2009/10/30 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
基于MVC方式实现三级联动(JavaScript)
2017/01/23 Javascript
12个非常有用的JavaScript技巧
2017/05/17 Javascript
javascript完美实现给定日期返回上月日期的方法
2017/06/15 Javascript
vue2项目使用sass的示例代码
2017/06/28 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
Angular实现搜索框及价格上下限功能
2018/01/19 Javascript
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
全面分析JavaScript 继承
2019/05/30 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
vue穿梭框实现上下移动
2021/01/29 Vue.js
[44:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第二局
2016/03/03 DOTA
Python类方法__init__和__del__构造、析构过程分析
2015/03/06 Python
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
python 定时器每天就执行一次的实现代码
2019/08/14 Python
opencv-python 提取sift特征并匹配的实例
2019/12/09 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
python是怎么被发明的
2020/06/15 Python
解决tensorflow读取本地MNITS_data失败的原因
2020/06/22 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
八年级语文教学反思
2014/02/11 职场文书
理想点亮人生演讲稿
2014/05/21 职场文书
工作经历证明书范文
2014/11/02 职场文书
2014年维修电工工作总结
2014/11/20 职场文书
观看建国大业观后感
2015/06/01 职场文书
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS