python命令行解析

前言

当你还在使用

if len(sys.argv) > 1:

这样的方式判断选项和参数的时候,是否已意识到已经落伍了。

我在bash中用过getopt getopts,我用完之后,就再也不记得他们,需要的时候又抄袭过来。

在perl中有好很多的模块GetOpt::Std,GetOpt::Long

python也有getopt的模块,按照c的风格使用。

我们跳过这里,直接进入更强大的阶段optparse,一种更友好的面向对象的方式,至少不需要getopt之后,进行一系列的if elif的判断。

随着模块的发展,最终argparse替换了它,详细原因可以参考PEP0389

学习

过一下手册,HOWTO,最终自己练习一下,来记住这个模块。

HOWTO比较简单,掌握了基本的用法。还有一些参数太多,不太常用的,可以慢慢摸索。看一下标准库第一个例子,查询一下里面几个参数。

练习

写一个自己的需求的程序,比较简单

需要

选项

-s 或者–safe 不带参数,变量为true或false;判断是否执行删除操作

-o 或者–output 参数为可写文件,如果没有参数,就默认生成一个tmp目录下的文件

参数

dir , 表示一个目录,缺省值为当前目录 .

import argparse

parser = argparse.Argumentparser(description="This is a de-duplicate tool")

parser.add_argument("dir",default=".",

help="target directory")

parser.add_argument("-s","--safe","--scan",

action="store_true",dest="not_delete",

help="scan directory only ,don't delete file")

parser.add_argument("-o","--output",type=FileType("w"),

default=generate_tmp())

args = parser.parse_args()

print "Dir:{}".format(args.dir)

if args.not_delete:

print "we are in safe mode."

print "output file:%s".format(args.output.name)

在txt上写好了

1.发现Argumentparser这个拼写错了,这个居然是驼峰的风格。

2.发现python 有生成零时文件的函数。

3.FileType这个是argparse里的方法

fix it

import argparse

import os

parser = argparse.ArgumentParser(description="This is a de-duplicate tool")

parser.add_argument("dir",default=".",

help="target directory")

parser.add_argument("-s","--safe","--scan",

action="store_true",dest="not_delete",

help="scan directory only ,don't delete file")

parser.add_argument("-o","--output",type=argparse.FileType("w"),

default=os.tmpfile())

args = parser.parse_args()

print "Dir:{}".format(args.dir)

if args.not_delete:

print "we are in safe mode."

print "output file:%s".format(args.output.name)

发现os.tmpfile不会返回路径,文件描述符消失时,自动删除文件

重找 tempfile 模块,这个模块居然也有坑,不是一个文件描述符,是操作系统描述符。好大一个坑

可以-o的默认参数改成None,做一些处理,获得需要的文件路径和文件描述符,形成统一。

import argparse

import os

import tempfile

parser = argparse.ArgumentParser(description="This is a de-duplicate tool")

parser.add_argument("dir",default=".",

help="target directory")

parser.add_argument("-s","--safe","--scan",

action="store_true",dest="not_delete",

help="scan directory only ,don't delete file")

parser.add_argument("-o","--output",type=argparse.FileType("w"),

help="output of scan result")

args = parser.parse_args()

print "Dir:{}".format(args.dir)

if args.not_delete:

print "we are in safe mode."

output_fifo=""

output_filename=""

if args.output:

output_fifo=args.output

output_filename=args.output.name

else:

fd, output_filename=tempfile.mkstemp(prefix="dedu-",suffix=".log")

output_fifo=os.fdopen(fd,"w")

print "output file:{}".format(output_filename)

output_fifo.close()

python 命令行解析模块_【Python模块】命令行解析--argparse相关推荐

  1. python中的logging记录日志_[ Python入门教程 ] Python中日志记录模块logging使用实例...

    python中的logging模块用于记录日志.用户可以根据程序实现需要自定义日志输出位置.日志级别以及日志格式. 将日志内容输出到屏幕 一个最简单的logging模块使用样例,直接打印显示日志内容到 ...

  2. python开发环境功能介绍_第一模块 第3章 Python介绍与环境配置

    python入门(全为重点) 1. 编程语言介绍 编程语言分类.总结 2. python介绍 3. 解释器多版本共存 4. 运行python程序的两种方式 5. 一个python程序运行的三个步骤(* ...

  3. python keyboard模块_[python] PyMouse、PyKeyboard用python操作鼠标和键盘

    1.PyUserInput 简介 PyUserInput是一个使用python的跨平台的操作鼠标和键盘的模块,非常方便使用.支持的平台及依赖如下: Linux - Xlib Mac - Quartz, ...

  4. python 爬取财经新闻_如何用 100 行 Python 代码实现新闻爬虫?

    CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 每天我都要坐地铁上班,而地铁里完全没有手机信号.但我希望在坐地铁的时候读些新闻,于是就写了下面这个新闻爬虫. 我 ...

  5. python批处理远程关机脚本_使用shutdown命令实现远程关机和重启

    在进行远程连接的时候,经常要远程关机,远程重启.在进行服务器远程维护时,经常需要进行远程关机.重启等电脑基础操作,使用SHUTDOWN强制关机重启命令和开始菜单的关机重启命令,基本可以保障远程电脑快速 ...

  6. 四全集学python选哪种电脑_“Python教程哪个版本最适合学习?“python教程全集

    python教程,求一套比较好的python教程 好不好主要先看你自己,理解能力样,有没有接触过编程,有没础,这很重要: 看教程,能不能先给你建立起知识体系框架,许多教程一上来就直接给你灌输知识很让人 ...

  7. python完全支持面向对象编程_[Python] 类与面向对象编程

    1. class语句 类通常是由函数.变量和属性组成的集合.使用class语句可以定义类,例如: class Account(object): num_accounts = 0 def __init_ ...

  8. python实训的意义_[Python] 一个让我更加清楚地理解了字典的实验……

    背景 由于一些安全上的要求,笔者所在公司在阿里云上的主机都要写白名单ACL.其中一个安全组中有监控的脚本需要发消息给企业微信,然后就犯了难--企业微信并没有接口告诉我们它的URL最后会解析为哪些ip, ...

  9. python嵩天课堂笔记_[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周)

    [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) 目录 强化学习 定义 马尔科夫决策过程 基本元素 值函数 最优值 ...

  10. python小软件制作教程_[Python]手把手教程:Python制作番茄钟

    这篇文章是根据Udacity的免费课程 编程基础:Python所做的笔记,适合零基础学习Python 我们先了解这个番茄钟的概念,就是每隔一段固定的时间就提醒你休息一下,可能是播放一段音乐, 弹出一个 ...

最新文章

  1. Re题目------Enm.exe
  2. python如何把数字转化成字符_python 定义一个dictpython如何将数字转化为字符串
  3. 简单高效!浙大CAD腾讯哥大开源跨尺度的Transformer,显著涨点检测、分割、分类三大CV任务!...
  4. 黑群晖给局域网电脑发消息_老电脑搭建家用NAS,省钱又好用
  5. java怎么确定数据在区间内_电脑数据怎么恢复详细篇,我们该如何确定故障如何进行数据恢复!...
  6. You have provided a value for the LANGUAGE_CODE setting that is not in the LANGUAGES setting
  7. 4. 卷2(进程间通信)---管道和FIFO
  8. 小明是个急性子,上小学的时候经常吧老师写在黑板上的题目抄错 有一次,老师出的题目是:36x495=? 他却给抄成了:396x45=? 但是结果很戏剧性,他的 答案是对的 因为36*495 = 39
  9. 公路堵车概率模型:Nagel-Schreckenberg 模型模拟
  10. 魔法表格(MagicTable)入门教程--CAD转Excel、CAD多个表格批量转Excel
  11. Elasticsearch 7.7.0 高阶篇-聚合技术
  12. MySQL备份报错mysqldump: Got error: 1045: Access denied for user ‘root‘@‘localhost‘ (using password: YES)
  13. 生活杂谈-简单电器维修知识
  14. Java常用集合排序
  15. 大写金额换算器iOS版源代码
  16. 5G驻留比提升经验总结
  17. wincc做皮带动画_WINCC动画脚本集锦
  18. Hive desc详解
  19. 剑指offer 专项突破版 78、合并排序链表
  20. MIPCMS如何用火车头采集自定义字段?

热门文章

  1. quartus 2操作
  2. Au:改变音频持续时间
  3. 《士兵突击》- 激昂振奋人心的曲子
  4. 关于word标题样式——字体设置,应用后无效的问题
  5. 清华大学五道口金融学院2020年博士生(普博项目)招生综合考核及录取办法
  6. java中发送邮件,如何设置发件人名称、昵称
  7. 2022-2028全球汽车碳纤维复合材料零件行业调研及趋势分析报告
  8. 为什么你睡了11个小时仍然觉得疲累?
  9. 软件测试术语 - 全面质量管理
  10. Data Vault2.0方法论之审查和改进-全面质量管理