Python argparse模块实现模拟 linux 的ls命令
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命令的更多相关文章
- Python argparse 模块
Python argparse 模块 test.py: import argparse argparser = argparse.ArgumentParser(add_help=False) argp ...
- python - argparse 模块学习
python - argparse 模块学习 设置一个解析器 使用argparse的第一步就是创建一个解析器对象,并告诉它将会有些什么参数.那么当你的程序运行时,该解析器就可以用于处理命令行参数. 解 ...
- Linux下 ls 命令的高级用法8例
Linux下 ls 命令的高级用法8例 在Linux下,ls这个命令大家肯定太熟悉了,良许相信只要是Linux工程师,每天都会离不开这个命令,而且一天会使用个几百次.但是,除了 ls -l 以外,你还 ...
- python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客
python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客 python datetime模块strptime/strptime form ...
- Linux下ls命令显示符号链接权限为777的探索
Linux下ls命令显示符号链接权限为777的探索 --深入ls.链接.文件系统与权限 一.摘要 ls是Linux和Unix下最常使用的命令之一,主要用来列举目录下的文件信息,-l参数允许查看当前目录 ...
- Linux的ls命令在Windows中的应用
Linux的ls命令在Windows中的应用 注:ls是Linux中的命令.其作用是列出当前目录下的文件与文件夹.效果等同于Wndows中的dir指令. 如下图 下面是详细步骤 步骤一.在桌面新建一个 ...
- python argparse模块解析命令行选项简单使用
argparse模块的解析命令行选项简单使用 util.py #!/usr/bin/env python # coding=utf-8 import argparse parser = argpars ...
- Python Argparse模块
argparse模块 在Python中,argparse模块是标准库中用来解析命令行参数的模块,用来替代已经过时的optparse模块.argparse模块能够根据程序中的定义从sys.argv中解析 ...
- 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 ...
随机推荐
- akka源码导读
akka的actor模型提供了强大的并发,本人就akka源码进行了详细的阅读,下面是一些体会. 1.object SystemMessageList: @tailrec private[sysmsg] ...
- JavaScript观察者模式
观察者模式观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时就会通知所有的观察者对象,使得 ...
- mybatis逆向工程
一.背景 在实际开发中我们会自己去写mapper映射文件,接口,数据库表对应的实体类,如果需求任务比较少,咱们还可以慢慢的一个一个去写,但是这是不现实的,因为在工作中我们的任务是很多的,这时mybat ...
- Django(一)
Django 一.什么是web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演 ...
- 【Win 10 应用开发】在代码中加载文本资源
记得前一次,老周给大伙,不,小伙伴们介绍了如何填写 .resw 文件,并且在 XAML 中使用 x:Uid 标记来加载.也顺便给大伙儿分析了运行时是如何解析 .resw 文件的. 本来说好了,后续老周 ...
- 100. Same Tree(leetcode)
Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...
- 06-从零玩转JavaWeb-数组在内存当中的存放形式
一.JVM的内存划分 想要了解数组的内存存储,先要了解JVM的整体内存划分,详细参见第04JVM内存详解 二.数组在JVM当中的存储详解 假如我们有如下代码: 上面代码当中,创建数组的过程我们可以把 ...
- px em rem的详解与区别
在前端项目开发中,px,em,以及rem都是页面布局常用的单位,虽然它们是长度单位,但是所含的意义不一样.通过复习和查阅,总结了以下知识. px像素(Pixel) 定义:相对长度单位.像素px是相对于 ...
- Java基础笔记1
java (开源,跨操作系统)j2ee jre java基础 javaoop java高级 JDK(JAVA developer Kitool): java开发工具 (开发人员使用) JRE(java ...
- [Bayes] Variational Inference for Bayesian GMMs
为了世界和平,为了心知肚明,决定手算一次 Variational Inference for Bayesian GMMs 目的就是达到如下的智能效果,扔进去六个高斯,最后拟合结果成了两个高斯,当然,其 ...