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实现将xml导入至excel
Nov 20 Python
AI人工智能 Python实现人机对话
Nov 13 Python
numpy返回array中元素的index方法
Jun 27 Python
python leetcode 字符串相乘实例详解
Sep 03 Python
解决Python中定时任务线程无法自动退出的问题
Feb 18 Python
python进程间通信Queue工作过程详解
Nov 01 Python
Python TCP通信客户端服务端代码实例
Nov 21 Python
基于python中__add__函数的用法
Nov 25 Python
flask实现验证码并验证功能
Dec 05 Python
利用Python脚本实现自动刷网课
Feb 03 Python
python UIAutomator2使用超详细教程
Feb 19 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
May 27 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中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
JpGraph php柱状图使用介绍
2011/08/23 PHP
CodeIgniter框架过滤HTML危险代码
2014/06/12 PHP
PHP实现微信发红包程序
2015/08/24 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
一个简单的js鼠标划过切换效果
2010/06/30 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
node+koa2+mysql+bootstrap搭建一个前端论坛
2018/05/06 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
2020/06/05 Javascript
详解如何在Javascript中使用Object.freeze()
2020/10/18 Javascript
[05:05]第三天的dota2
2013/07/29 DOTA
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
Python下的Mysql模块MySQLdb安装详解
2014/04/09 Python
Python实现去除代码前行号的方法
2015/03/10 Python
python fabric实现远程部署
2017/01/05 Python
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
关于Tensorflow分布式并行策略
2020/02/03 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
物业经理求职自我评价
2013/09/22 职场文书
企业厂长岗位职责
2013/12/17 职场文书
大学校园毕业自我鉴定
2014/01/15 职场文书
偷看我的初中毕业鉴定
2014/01/29 职场文书
《日月潭》教学反思
2014/02/28 职场文书
介绍信的格式
2015/01/30 职场文书
党支部对转正的意见
2015/06/02 职场文书
青年教师听课心得体会
2016/01/15 职场文书
《自己去吧》教学反思
2016/02/16 职场文书
导游词之江西赣州
2019/10/15 职场文书
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python