基于argparser模块实现 ls 功能(基本实现)
Posted jerryzao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于argparser模块实现 ls 功能(基本实现)相关的知识,希望对你有一定的参考价值。
第一版:实现基本功能,但是没有获取属主,属组,只能在一个目录下,不能传入多个目录:如 ls /etc /tmp
1 import argparse 2 from pathlib import Path 3 import stat # 获取文件权限 mode = stat.filemode(st.st_mode) 4 import datetime 5 6 def iteradir(p:str, all=False, detail=True, human=False): 7 def _gethuman(size:int): 8 unit = [‘‘,‘M‘,‘G‘,‘T‘,‘P‘] # 用字符串好点,序列化时候,节省空间 9 index = 0 10 while size > 1000: # 4001 11 size //= 1000 12 index += 1 13 return ‘{}{}‘.format(size, unit[index]) 14 15 16 def listdir(p:str, all=False, detail=True, human=False): # drwxrwxr-x. 5 py py 4096 Aug 31 18:10 projects 17 path = Path(p) 18 for x in path.iterdir(): 19 if not all and x.name.startswith(‘.‘): 20 continue 21 if detail: 22 st = path.stat() 23 24 mode = stat.filemode(st.st_mode) 25 human = _gethuman(st.st_size) if human else str(st.st_size) # 是否-h 26 atime = datetime.datetime.fromtimestamp(st.st_atime).strftime(‘%Y/%m/%d %H-%M-%S‘) 27 yield (mode, st.st_nlink, st.st_uid, st.st_gid, human, atime, x.name) 28 else: 29 yield (x.name,) 30 #返回什么 31 # listdir(p, all, detail, human) 32 #排序 33 yield from sorted(listdir(p, all, detail, human),key=lambda x: x[-1]) 34 35 if __name__ == ‘__main__‘: 36 parser = argparse.ArgumentParser( 37 prog = ‘ls‘, 38 description=‘Process some int‘, 39 add_help = False 40 ) 41 parser.add_argument(‘path‘,nargs=‘?‘, default=‘.‘, help=‘file path‘)# 位置参数 42 parser.add_argument(‘-l‘,dest=‘list‘, action=‘store_true‘) 43 parser.add_argument(‘-a‘, ‘--all‘, action=‘store_true‘) 44 parser.add_argument(‘-h‘, ‘--human-readable‘, dest=‘human‘, action=‘store_true‘, help=‘with -l human size‘) 45 46 args = parser.parse_args() # 解析:如:/etc ---> e t c 把其当作一个可迭代对象了,所以可以这样输入 (‘/etc‘,) 47 48 49 for i in iteradir(args.path, args.all, args.list, args.human): 50 for j in i: 51 print(j, end=‘ ‘) 52 print()
以上是关于基于argparser模块实现 ls 功能(基本实现)的主要内容,如果未能解决你的问题,请参考以下文章