我是靠谱客的博主 还单身发夹,最近开发中收集的这篇文章主要介绍【Python模块】命令行解析--argparse前言学习练习,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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()

转载于:https://www.cnblogs.com/shalk/p/9769589.html

最后

以上就是还单身发夹为你收集整理的【Python模块】命令行解析--argparse前言学习练习的全部内容,希望文章能够帮你解决【Python模块】命令行解析--argparse前言学习练习所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部