基于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 功能(基本实现)的主要内容,如果未能解决你的问题,请参考以下文章

『Argparse』命令行解析

学习python argparse模块下载安装和使用

『Argparse』命令行解析

Python的Argparse模块是什么?(未完)

python3中argparse模块

python 模块argparse用法实例详解