python argparse模块

argparse模块

argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块

使用步骤

import argparse  # 1 导入模块,这个没什么说的

parser = argparse.ArgumentParser()  # 2 实例化一个对象,默认参数一堆,只有description参数可以设置一下

parser.add_argument()  # 3 一次加入每一个参数或选项,主要是这里

parser.parse_args()  # 4 获取参数,用的时候给他赋个值

1添加位置参数 

import argparse#位置参数
def test01():# 先不添加参数parser = argparse.ArgumentParser(description='解析命令行参数')args = parser.parse_args()#  打印一下所有参数print(args)

上面的例子运行后,由于没有添加任何参数,所以看不出什么。不过可以加上-h 或 --help 运行一下,会显示我们自定义的description的内容,以及默认的help的内容
运行结果:

命令行运行结果:

2 添加参数说明
 

def test02():# 这里的关键参数去掉了,看看和刚才比缺少了什么parser = argparse.ArgumentParser()parser.add_argument('echo')  # 添加一个位置参数args = parser.parse_args()print(args.echo)  # 获取参数,打印出来print(args)  # 看看整个的内容
if __name__ =="__main__":test02()

此时再运行程序,会提示你缺少参数。必须带上一个参数运行,比如test.py arg_test。并且后面的参数只能是1个,就是不能多也不能少。

运行结果:

命令行运行结果:

3 设置参数的数据类型

def test03():parser = argparse.ArgumentParser(description='解析命令行参数')parser.add_argument('echo', help='直接打印这个参数的值', type=int)args = parser.parse_args()print(args.echo, type(args.echo))  # 获取参数,打印出来print(args)  # 看看整个的内容
if __name__ =="__main__":test03()

运行结果: 

命令行运行结果:

4 使用文件作为参数

#使用文件作为参数
def test04():parser = argparse.ArgumentParser()parser.add_argument('file', type=argparse.FileType('r'))  # 读取文件args = parser.parse_args()# 打印文件内容for line in args.file:print(line.strip())
if __name__ =="__main__":test04()

 

命令行运行结果:

5 定义默认值

 

从刚才开始必须要带参数才能运行程序了,可以通过设置默认值来解决不带参数启动的问题

 

命令行运行结果:

6 参数候选值

使用choise关键参数,可以限定这个参数的值必须在候选的列表内。
def test06():parser = argparse.ArgumentParser(description='解析命令行参数')parser.add_argument('echo', choices=['a', 'b', 'c'], default='a', nargs='?')args = parser.parse_args()print(args.echo, type(args.echo))  # 获取参数,打印出来print(args)  # 看看整个的内容
if __name__ =="__main__":test06()

这样只有输入正确才能正常执行,这里注意,如果有default,那么default的值也得再候选值之中。 

7 选项参数

像-h 和 --help 一样,也可以设置自己的选项参数。设置的时候短参数和长参数可以值设置一个,如果没有冲突的话建议都写上。另外上面讲过的那些关键参数,比如说明、默认值、候选值都可以使用
#选项参数
def test07():parser = argparse.ArgumentParser(description='解析命令行参数')parser.add_argument('-v', '--verbose', help='increase verbosity')args = parser.parse_args()print(args.verbose, type(args.verbose))  # 获取参数,打印出来print(args)  # 看看整个的内容
if __name__ =="__main__":test07()

如果有长参数,取值的时候就是使用长参数的名字取值。只有短参数的情况下才是用短参数的名字取值。当然也可以指定一个别的变量名。 和位置参数相反,选项参数默认是非必须。不输入选项的情况下取到的值是None,输入选项但是又没在后面写值而且也没默认值,则会出错。 如果需要,也可以将选项设置为必须输入。

运行结果:

命令行运行结果:

8 指定选项参数的默认名

使用required=True 后,这个选项就不再是可选的了,而是必须输入

#指定选项参数的变量名
def test08():parser = argparse.ArgumentParser(description='解析命令行参数')parser.add_argument('-v', '--verbose', help='increase verbosity',dest='ver',required=True)  # 用dest来指定变量名args = parser.parse_args()print(args.ver, type(args.ver))  # 获取参数,打印出来。这里的变量名是自己在dest里指定的了print(args)  # 看看整个的内容
if __name__ =="__main__":test08()

参考自https://www.imooc.com/article/34047

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STL5-异常

异常可以跨函数 异常必须处理 1、 #include<iostream> using namespace std; //c异常机制 跨函数 //c异常必须处理 不能留&#xff0c;否则报错 int divided(int x, int y) {if (y 0)throw y; //抛异常return (x / y); } void test01() {int x 10, y 0;//试着去捕获…

java 并发组件_Java 并发计数组件Striped64详解

作者&#xff1a; 一字马胡转载标志 【2017-11-03】更新日志日期更新内容备注2017-11-03添加转载标志持续更新Java Striped64Striped64是在java8中添加用来支持累加器的并发组件&#xff0c;它可以在并发环境下使用来做某种计数&#xff0c;Striped64的设计思路是在竞争激烈的时…

ubuntu的MySQL远程数据库连接问题查找

1、开放端口3306 2、添加权限 3、服务器本身没有在安全组规则中开放权限 添加安全组规则后重试。

java中集合怎么定义_Java集合系列(一):集合的定义及分类

1. 集合的定义什么是集合呢&#xff1f;定义&#xff1a;集合是一个存放对象的引用的容器。在Java中&#xff0c;集合位于java.util包下。2. 集合和数组的区别(面试常问)提到容器&#xff0c;就会想起数组&#xff0c;那么集合和数组的区别是什么呢&#xff1f;(这里是重点&…

STL6-输入输出流

cout 是 console output 缩写 程序 和键盘 之间有一个输入缓冲区 程序 和 显示器 之间有一个输出缓冲区 #include<iostream> #include<windows.h> #include<iomanip> using namespace std; #if 0 cout << "dd"; //全局流对象&#xff0c;默…

Ubuntu nginx+uwsgi部署Django项目

前提条件&#xff1a;首先项目使用一下命令启动成功后&#xff0c;输入公网ip后可以启动成功 python manage.py runserver 0.0.0.0:80 一、阿里云配置安全组 添加8000端口 二、安装配置uwsgi 1、确定django项目可以正常运行了&#xff0c;ctrlc停止项目&#xff0c;下面我们来…

STL7-基础

1、容器可以嵌套容器 2、容器分为序列式容器和关联式容器 序列式容器&#xff1a;容器的元素的位置是由进入容器时机和地点来决定 关联式容器&#xff1a;容器已经有规则&#xff0c;进入容器的元素的位置不是由进入容器时机和地点来决定 只与此容器的排列规则有关 3、迭代…

java 假设当前时间_Java中与日期和时间相关的类和方法

一、currentTimeMillis()方法System 类中的方法 currentTimeMillis() 方法可以返回从 GMT1970 年 1 月 1 日 00 : 00 : 00 开始到当前时刻的毫秒数。System.currentTimeMillis(); //返回值为long类型二、Date类1.构造方法(1)public Date (); 以当前系统时间创建一个Date对象&am…

STL8-string容器

C 没有 string 类&#xff0c;但提供了直接对字符数组、字符串操作的函数 -> 如 str_len()等等 -> 需要包含 “string.h”#include<iostream> #include<string> using namespace std;//初始化 void test01() {string s1; //调用无参构造string s2(10, a);str…

java 采集 cms_开源 java CMS - FreeCMS2.3 Web页面信息采集

Web页面信息采集从FreeCMS 2.1开始支持通过简单配置即可抓取目标网页信息&#xff0c;支持增量式采集、关键字替换、定时采集&#xff0c;同一采集规则可采集多个页面(静态和动态)&#xff0c;可采集多种信息属性&#xff0c;可自动审核且静态化信息页面。采集规则管理从左侧管…

Python中reshape函数参数-1的意思?

import numpy as np c np.array([[1,2,3],[4,5,6]]) print(2行3列) print(c.reshape(2,3)) print(3行2列) print(c.reshape(3,2)) print(我也不知道几行&#xff0c;反正是一列) print(c.reshape(-1,1)) print(我也不知道几列&#xff0c;反正是一行) print(c.reshape(1,-1)) …

STL9-vector容器

vector容器 动态数组 可变数组 vector容器 单口容器 vector实现动态增长&#xff1a; 当插入新元素时&#xff0c;如果空间不足&#xff0c;那么vector会重新申请更大内存空间&#xff08;默认二倍&#xff09;&#xff0c;将原空间数据拷贝到新空间&#xff0c;释放旧空…

函数返回值失效

#include<stdio.h> #include<stdlib.h> #include<string.h> #if 1 char* getMen2() {char buf[64]; //临时变量&#xff0c;栈区存放strcpy(buf, "abccddeeff");printf("buf:%s\n", buf);return buf; //此处并不是把内存块64个字节ret…

mysql突然出现慢sql_Mysql开启慢SQL并分析原因

第一步.开启mysql慢查询方式一:修改配置文件Windows&#xff1a;Windows 的配置文件为 my.ini&#xff0c;一般在 MySQL 的安装目录下或者 c:\Windows 下。Linux&#xff1a;Linux 的配置文件为 my.cnf &#xff0c;一般在 /etc 下在 my.ini 增加几行:[mysqlld]long_query_time…

STL10-deque容器

deque 双端队列 deque 删除操作 deque案例&#xff1a; #if 1 #include<iostream> #include<deque> using namespace std; void PrintDeque(deque<int>& d) {for (deque<int>::iterator it d.begin(); it ! d.end(); it) {cout << *it <…

STL11-stack容器

#if 1 #include<iostream> #include<stack> using namespace std;void test01() {//初始化stack<int> s1;stack<int> s2(s1);//stack操作s1.push(10);s1.push(20);s1.push(30);s1.push(40);cout << "栈顶元素&#xff1a;" << e…

java犀牛是什么意思_深入浅出Rhino:Java与JS互操作

2011年10月6日&#xff0c;一年一度的JavaOne大会隆重举行。JavaOne2011大会的主题之一介绍针对不同Java平台的产品路线图&#xff0c;这其中包括移动版(ME&#xff0c;Micro Edition)、标准版(SE&#xff0c;Standard Edition)以及企业版(EE&#xff0c;Enterprise Edition)。…

STL12-queue容器

queue容器 队列容器 先进先出 队列只能在一端插入 一端删除 队列不能遍历 不提供迭代器 不支持随机访问 #if 1 #include<iostream> #include<queue> using namespace std; void test01() {queue<int> q; //创建队列queue<int> q2(q);q.push(10);q.pu…

Leedcode7-binary-tree-postorder-traversal

#include<iostream> #include<vector> #include<stack> using namespace std; // Definition for binary tree 先序遍历 根左右 struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; #if 0 c…

用tensorflow搭建RNN(LSTM)进行MNIST 手写数字辨识

用tensorflow搭建RNN(LSTM)进行MNIST 手写数字辨识 循环神经网络RNN相比传统的神经网络在处理序列化数据时更有优势&#xff0c;因为RNN能够将加入上&#xff08;下&#xff09;文信息进行考虑。一个简单的RNN如下图所示&#xff1a; 将这个循环展开得到下图&#xff1a; 上一…