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命令相关推荐

  1. python的argparse模块

    使用步骤: 1:import argparse        #导入argparse模块 2:parser = argparse.ArgumentParser()        #创建实例 3:par ...

  2. linux命令dd创建虚拟硬盘,每日一题.PYTHON如何模拟LINUX的dd命令快速创建大文件?...

    原文数据: 无 具体要求: 1. 模拟Linux的dd命令快速创建大文件 代码实现: # -*- coding: utf-8 -*- """ # # Authors: l ...

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

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

  4. linux中ls命令

    linux中ls命令应该用的很多了,列出当前路径下的文件和目录ls 查看目录中的文件          ls -F 查看目录中的文件          ls -l 显示文件和目录的详细资料      ...

  5. linux命令ls什么意思,ls是什么意思(精通 Linux 的 ls 命令)

    ls是什么意思(精通 Linux 的 ls 命令) Linux 的 ls 命令拥有数量惊人的选项,可以提供有关文件的重要信息. -- Seth Kenlon(作者) ls 命令可以列出一个 POSIX ...

  6. linux中ls命令意思,linux中的ls命令的详细解释

    linxu下的ls命令是用来显示目标列表的.下面由学习啦小编为大家整理了linux的ls命令的详细解释的相关知识,希望对大家有帮助! 一.linux中的ls命令的详细解释 ls命令 ls命令用来显示目 ...

  7. python自学argparse模块

    argparse模块 argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块 使用步骤 import argparse # 导入模块,这个没什么说的 ...

  8. 【python之argparse模块学习】简单入门

    目录 0 前言 1 入门程序 2 参数 2.1 位置参数 2.2 可选参数 2.3 矛盾选项 3 总结 4 参考文献 0 前言 该模块地位: Python 标准库中推荐的命令行解析模块. 类比linu ...

  9. python之Argparse模块

    argparse 模块可以轻松编写用户友好的命令行接口.程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数. argparse 模块还会自动生成帮助和使用手册 ...

最新文章

  1. 枚举与Combox的SelectedIndex绑定出现怪异问题的解决方案
  2. 信息系统安全等级保护的定级准则和等级划分
  3. 编译原理什么是移进规约冲突_编译原理复习题
  4. java实现登陆面试题_【Javaweb】笔面试题 ---(1)(示例代码)
  5. LeetCode 之 JavaScript 解答第141题 —— 环形链表 I(Linked List Cycle I)
  6. keychron k8 连接切换蓝牙方案
  7. 开关电源闭环控制原理_stepbystep,电路设计全过程(含原理图)
  8. Hinton胶囊网络代码正式开源,5天GitHub fork超1.4万
  9. RapidMiner是什么,主要的功能和特点是什么?
  10. 使用Elasticsearch搭建一个文件搜索系统(带界面)
  11. 【52】NVMe暴力热插拔对系统的要求
  12. 【Windows】文件夹被占用删除不掉
  13. 百度ai人体关键点识别
  14. 基于Barra多因子模型的组合权重优化
  15. cαr怎么发音_最全英语口语发音规则与技巧
  16. 94、基于51单片机的无线调频对讲机系统设计
  17. HTML5期末大作业:英雄联盟网站设计——英雄联盟LOL(4页) HTML+CSS+JavaScript web期末网站设计大作业
  18. 如何在Mac上安装IntelliJ IDEA
  19. kalman filter java_Kalman Filter算法详解
  20. OKHttp 快速开始

热门文章

  1. 【MySQL】mysql show操作简单示例
  2. Scala : unsupported operationexception : empty.reduceLeft
  3. 【flink】95-260-045-源码-检查点-CheckPoint
  4. 【Maven】log4j-slf4j-impl cannot be present with log4j-to-slf4j
  5. 【Flink】分布式快照算法—— Chandy-Lamport 算法
  6. java.io.IOException: InvalidResourceRequestException: Invalid resource request
  7. 17-Elasticsearch与关系数据库的对比(索引 Indices的理解,主要概念的理解)
  8. Centos KVM 基本安装过程
  9. mysql++编程规范_建议收藏 - 专业的MySQL开发规范
  10. php左右菜单,JQuery实现左右滚动菜单特效_jquery