当前位置: 首页 > 后端技术 > Python

会python写linux命令的人进大厂谈何容易?

时间:2023-03-26 00:17:09 Python

看过这篇《2000字谏言,给那些想学Python的人,建议收藏后细看!》的读者应该都对一个命令有一点印象吧?没错,就是linux中经常用到的ls命令。在文章中,我提到了如何提高我的python能力?直接找项目写,但是作为零基础/初学/初学,做博客需要学习web框架、html、css、js,成为阻碍你写实际项目的障碍。所以我推荐这个命令:ls。写一个ls很简单,你只需要了解一点linux的基础知识,知道ls能做什么。那么今天就码个ls.py,哪里都可以用,没错,windows也可以用~demo环境操作系统:windows10python版本:python3.7idea:pycharm2018.2使用模块:argparse,os理解argparse模块argparse是Python的标准库,可以让我们非常友好的编写命令行界面,并且可以自动生成帮助文档和使用信息,也可以在参数无效时报错。argparse.ArgumentParse类参数理解prog:要更改应用程序的名称,我们可以使用%(prog)s来引用应用程序的名称,默认的应用程序名称是文件名。usage:显示该命令的用法,一般用于显示参数的用法description:显示该命令的帮助信息epilog:显示该命令的帮助信息,位置在参数下方action:指定命令行参数,内置如下存储:默认值,只保存参数值。store_const:与store基本相同,只是只保存const关键字指定的值,其他值会报错store_true|store_false:与store_const基本相同,只保存True和Falseappend:将同一个参数的不同值保存在一个列表中count:统计参数出现的次数help:输出程序版本的帮助信息:输出版本程序nargs的信息:将不同数量的值与一个参数nargs=N相关联:N是一个整数nargs='?'nargs='*':combineallnargs='+':将所有参数保存在列表中,但必须至少有一个参数nargs=argparse.REMAINDER:将其余参数保存在列表中默认:如果这个参数没有传入,默认使用默认参数的值类型:接收到的参数将由该参数对应的函数处理。choices:指定一个范围内的参数,超过则报错。required:指定参数是否为必填参数。dest:自定义参数的名称,默认名称为“-后的值”或“--后的值”。编写ls命令脚本这里我们简单的指定三个参数。-a:加-a参数显示隐藏文件。-r:添加-r参数,递归显示文件夹下的文件。-d:指定显示目录,不指定则默认为当前目录。首先,我们使用ArgumentParser类来指定参数。importosimportargparseparser=argparse.ArgumentParser(prog='ls',description='显示文件夹下的文件')#指定参数parser.add_argument('-a','--all',const=True,nargs='?',help='是否显示隐藏文件')parser.add_argument('-d','--directory',help='指定显示目录,不指定默认为当前目录')parser.add_argument('-r','--recursion',const=True,nargs='?',help='是否递归显示')#解析参数args=parser.parse_args()#获取目录参数,如果你不传这个参数,ForNondirectory=args.directory#Ifdirectoryhasavalueifdirectory:#如果指定的目录不存在,抛出异常ifnotos.path.exists(directory):raiseValueError(f'{directory}does`texist')#如果目录不是目录,则抛出异常os.path.isdir(directory):raiseValueError(f'{directory}isnotadirectory')#IfdirectoryisNone,给目录e赋值lse:目录='.'我们指定好参数之后,接下来就是具体ls的实现了。我们封装了一个LsCommand类classLsCommand():def__init__(self,show_all=False,directory='.',recursion=False):''':paramshow_all:是否显示隐藏文件:paramdirectory:指定文件目录:paramrecursion:是否递归显示目录下的文件'''self.show_all=show_allself.recursion=recursionself.directory=os.path.abspath(directory)defhandle_dir(self,directory,grade=1,placeholder='--'):'''处理目录:param目录:文件目录:param等级:目录级别:paramplaceholder:子目录前的占位符file:return:'''#判断是否为文件夹#是否等级已添加#os.listdir:列出当前文件夹下的所有文件和文件夹#遍历目录下的文件,folderpassdefshow_file_or_dir(self,file,prefix=''):#如果隐藏文件不显示#打印prefix并且文件名通过defrun(self):'''运行ls命令:return:'''#os.listdir(dir)获取所有文件andfoldersinthedirdirectory#先遍历self.directory目录下的所有文件和文件夹我们也封装了passls类,然后我们将获取到的参数传给lsCommand类,然后运行,可以愉快的得到结果ls=LsCommand(bool(args.all),directory,bool(args.recursion))ls.run()效果展示:pythonls.pythonls.py-apythonls.py-a-rpythonls.py-d./temp关注公众号“Python专栏”,后台回复“机器学习电子书”,免费获得100本机器学习电子书