python 模拟linux的 ls 命令

sample: python custom_ls.py -alh c:/

选项:

-a ,--all 显示所有文件,包括'.'开头的隐藏文件

-l  列表显示每个文件详细信息

-h 以人类可读的方式显示,文件大小会被换算成 K、M、G、T 或 P 的单位

path

只能接受一个path路径,需要改进。

from pathlib import Path
import argparse
import datetime
import stat
import os def convert_mode(mode: int):
modelist = ['r', 'w', 'x', 'r', 'w', 'x', 'r', 'w', 'x']
m = mode & 0o777
modestr = bin(m)[-9:]
ret = ""
for i, v in enumerate(modestr):
if v == '1':
ret += modelist[i]
else:
ret += '-'
return ret def convert_type(file: Path):
ret = ""
if file.is_symlink():
ret = 'l'
elif file.is_fifo():
ret = 'p'
elif file.is_socket():
ret = 's'
elif file.is_block_device():
ret = 'b'
elif file.is_char_device():
ret = 'c'
elif file.is_dir():
ret = 'd'
elif file.is_file():
ret = '-'
else:
ret = '?'
return ret def list_dir(path: str = '.', all=False, detail=False, human=False):
units = ['', 'K', 'M', 'G', 'T', 'P'] def _convert_human(size: int):
depth = 0
while size >= 1024:
size = size // 1024
depth += 1
return "{}{}".format(size, units[depth]) def _show_dir(path: str = '.', all=False, detail=False, human=False):
p = Path(path)
for file in p.iterdir():
if not all and str(file.name).startswith('.'):
continue if detail:
st = file.stat() h = st.st_size
if human:
h = _convert_human(st.st_size) owner, group = st.st_uid, st.st_gid
if os.name == "posix":
owner, group = file.owner(), file.group() yield str((stat.filemode(st.st_mode), st.st_nlink, owner, group, str(h),
datetime.datetime.fromtimestamp(st.st_atime).strftime('%Y-%m-%d %H:%M:%S'),
file.name)).strip(
'()')
else:
yield str((file.name,)).strip('()') yield from sorted(_show_dir(args.path, args.all, args.l, args.h), key=lambda x: x[-1]) parser = argparse.ArgumentParser(prog='ls', add_help=False, description='list directory contents. --20171031')
parser.add_argument('path', nargs='?', default='.', help='give a path (files or direction)')
parser.add_argument('-l', action='store_true', help='List Display details')
parser.add_argument('-h', action='store_true', help='Human readable way to show "kmgtp" size')
parser.add_argument('-a', '--all', action='store_true', help='Show hidden files at the same time') if __name__ == '__main__':
args = parser.parse_args(('.', '-ahl'))
parser.print_help()
print('args=', args) for st in list_dir(args.path, args.all, args.l, args.h):
print(st)

  

Python argparse模块实现模拟 linux 的ls命令的更多相关文章

  1. Python argparse 模块

    Python argparse 模块 test.py: import argparse argparser = argparse.ArgumentParser(add_help=False) argp ...

  2. python - argparse 模块学习

    python - argparse 模块学习 设置一个解析器 使用argparse的第一步就是创建一个解析器对象,并告诉它将会有些什么参数.那么当你的程序运行时,该解析器就可以用于处理命令行参数. 解 ...

  3. Linux下 ls 命令的高级用法8例

    Linux下 ls 命令的高级用法8例 在Linux下,ls这个命令大家肯定太熟悉了,良许相信只要是Linux工程师,每天都会离不开这个命令,而且一天会使用个几百次.但是,除了 ls -l 以外,你还 ...

  4. python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客

    python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客     python datetime模块strptime/strptime form ...

  5. Linux下ls命令显示符号链接权限为777的探索

    Linux下ls命令显示符号链接权限为777的探索 --深入ls.链接.文件系统与权限 一.摘要 ls是Linux和Unix下最常使用的命令之一,主要用来列举目录下的文件信息,-l参数允许查看当前目录 ...

  6. Linux的ls命令在Windows中的应用

    Linux的ls命令在Windows中的应用 注:ls是Linux中的命令.其作用是列出当前目录下的文件与文件夹.效果等同于Wndows中的dir指令. 如下图 下面是详细步骤 步骤一.在桌面新建一个 ...

  7. python argparse模块解析命令行选项简单使用

    argparse模块的解析命令行选项简单使用 util.py #!/usr/bin/env python # coding=utf-8 import argparse parser = argpars ...

  8. Python Argparse模块

    argparse模块 在Python中,argparse模块是标准库中用来解析命令行参数的模块,用来替代已经过时的optparse模块.argparse模块能够根据程序中的定义从sys.argv中解析 ...

  9. Changing the Color of Linux ls Command 改变Linux的ls命令显示的颜色

    Linux command ls basically use the file /etc/DIR_COLORS or /etc/DIR_COLORS.xterm to define the color ...

随机推荐

  1. 当谈到 GitLab CI 的时候,我们都该聊些什么(下篇)

    上篇主要介绍了 GitLab WorkFlow 以及 CI/CD 做的事情,并且详细分析 GitLab CI 跟 Runner 信息交互是如何进行的.接下来将为大家讲解 Executor 的实现,再通 ...

  2. masonry 设置控件抗压缩及抗拉伸

    使用masonry正常设置约束时两个label的显示是下图 添加代码设置蓝色label的抗压缩属性后( [self.missionNameLabel setContentCompressionResi ...

  3. 我的第一个python web开发框架(9)——目录与配置说明

    和老大聊完后,小白回家接收到相关工具函数包后,就按要求开始干活,首先要做的是熟悉配置参数和了解工具函数有哪些实用的工具. 由于这个项目比较简单,所以不用创建那么多分类,只需要api.common.co ...

  4. win10 uwp 获得缩略图

    有时候需要获得文件或视频的缩略图. 本文提供两个方法,用于获得文件的缩略图和截取视频指定时间的显示图片. 文件缩略图 如果有一个文件需要获得缩略图,可以使用 GetThumbnailAsync 或 G ...

  5. Debian 9 中手动设置有线网络

    multi-user.target中不使用networkmanager,上网需要手动设置后才可以,进行有线网线的设置: 首先得到网卡名称:ip addr or ls /sys/class/net/,以 ...

  6. 利用Dropbox同步Arch下一些软件的配置文件

    一些软件后要好好的配置一番才能好好为自己所用,比如vim,比如conky等等,但是万一系统真出了问题,或者硬盘跪了,要重新安装系统重新配置的时候真是一种折磨,前阵子想到如果用dropbox同步那些配置 ...

  7. Linux命令用法

    1.cut http://www.cnblogs.com/dong008259/archive/2011/12/09/2282679.html 2.sed http://www.cnblogs.com ...

  8. idea配置jetty服务器,通过mvn实现

    今天想试试除了tomcat之外的另一个服务器jetty的使用: 关于项目在tomcat中的启动大概有多种,尤其是在本地环境下,ide关于tomcat的优化做的很好,但是在idea上面部署tomcat总 ...

  9. Windows环境下多线程编程原理与应用读书笔记(3)————Windows环境中的多线程实现(3)

    纤程 纤程(fiber): 相当于用户级别的线程或轻进程.纤程由Win32库函数支持,对核心是不可见的.纤程可以通过SwitchToFiber显示至另一合作纤程,以实现合作纤程之间的协同.线程是在Wi ...

  10. Paint the Grid Reloaded(缩点,DFS+BFS)

    Leo has a grid with N rows and M columns. All cells are painted with either black or white initially ...