python idls_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 idls_Python argparse模块实现模拟 linux 的ls命令相关推荐
- python的argparse模块
使用步骤: 1:import argparse #导入argparse模块 2:parser = argparse.ArgumentParser() #创建实例 3:par ...
- linux命令dd创建虚拟硬盘,每日一题.PYTHON如何模拟LINUX的dd命令快速创建大文件?...
原文数据: 无 具体要求: 1. 模拟Linux的dd命令快速创建大文件 代码实现: # -*- coding: utf-8 -*- """ # # Authors: l ...
- Linux下 ls 命令的高级用法8例
Linux下 ls 命令的高级用法8例 在Linux下,ls这个命令大家肯定太熟悉了,良许相信只要是Linux工程师,每天都会离不开这个命令,而且一天会使用个几百次.但是,除了 ls -l 以外,你还 ...
- linux中ls命令
linux中ls命令应该用的很多了,列出当前路径下的文件和目录ls 查看目录中的文件 ls -F 查看目录中的文件 ls -l 显示文件和目录的详细资料 ...
- linux命令ls什么意思,ls是什么意思(精通 Linux 的 ls 命令)
ls是什么意思(精通 Linux 的 ls 命令) Linux 的 ls 命令拥有数量惊人的选项,可以提供有关文件的重要信息. -- Seth Kenlon(作者) ls 命令可以列出一个 POSIX ...
- linux中ls命令意思,linux中的ls命令的详细解释
linxu下的ls命令是用来显示目标列表的.下面由学习啦小编为大家整理了linux的ls命令的详细解释的相关知识,希望对大家有帮助! 一.linux中的ls命令的详细解释 ls命令 ls命令用来显示目 ...
- python自学argparse模块
argparse模块 argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块 使用步骤 import argparse # 导入模块,这个没什么说的 ...
- 【python之argparse模块学习】简单入门
目录 0 前言 1 入门程序 2 参数 2.1 位置参数 2.2 可选参数 2.3 矛盾选项 3 总结 4 参考文献 0 前言 该模块地位: Python 标准库中推荐的命令行解析模块. 类比linu ...
- python之Argparse模块
argparse 模块可以轻松编写用户友好的命令行接口.程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数. argparse 模块还会自动生成帮助和使用手册 ...
最新文章
- 枚举与Combox的SelectedIndex绑定出现怪异问题的解决方案
- 信息系统安全等级保护的定级准则和等级划分
- 编译原理什么是移进规约冲突_编译原理复习题
- java实现登陆面试题_【Javaweb】笔面试题 ---(1)(示例代码)
- LeetCode 之 JavaScript 解答第141题 —— 环形链表 I(Linked List Cycle I)
- keychron k8 连接切换蓝牙方案
- 开关电源闭环控制原理_stepbystep,电路设计全过程(含原理图)
- Hinton胶囊网络代码正式开源,5天GitHub fork超1.4万
- RapidMiner是什么,主要的功能和特点是什么?
- 使用Elasticsearch搭建一个文件搜索系统(带界面)
- 【52】NVMe暴力热插拔对系统的要求
- 【Windows】文件夹被占用删除不掉
- 百度ai人体关键点识别
- 基于Barra多因子模型的组合权重优化
- cαr怎么发音_最全英语口语发音规则与技巧
- 94、基于51单片机的无线调频对讲机系统设计
- HTML5期末大作业:英雄联盟网站设计——英雄联盟LOL(4页) HTML+CSS+JavaScript web期末网站设计大作业
- 如何在Mac上安装IntelliJ IDEA
- kalman filter java_Kalman Filter算法详解
- OKHttp 快速开始
热门文章
- 【MySQL】mysql show操作简单示例
- Scala : unsupported operationexception : empty.reduceLeft
- 【flink】95-260-045-源码-检查点-CheckPoint
- 【Maven】log4j-slf4j-impl cannot be present with log4j-to-slf4j
- 【Flink】分布式快照算法—— Chandy-Lamport 算法
- java.io.IOException: InvalidResourceRequestException: Invalid resource request
- 17-Elasticsearch与关系数据库的对比(索引 Indices的理解,主要概念的理解)
- Centos KVM 基本安装过程
- mysql++编程规范_建议收藏 - 专业的MySQL开发规范
- php左右菜单,JQuery实现左右滚动菜单特效_jquery