Python通过os.fstat与os.listdir实现简单的linux下的ls指令

Python通过os.fstat与os.listdir实现简单的linux下的ls指令

第一次写博客如有不好的地方望大家指正!谢谢!
多余的也不再赘述了直接上代码:

#!/usr/bin/python3
# coding=utf-8
# @File: myls.py
# @Time: 2021/08/31 14:46:56
# @Author: young cynic 
# 功能:通过os.fstat()和os.listdir()实现ls的简单指令
# 运行环境ubuntu
import sys,os,stat,time,pwd,grp

def file_permision(mode):
    flag = stat.S_IFMT(mode)

    if flag == stat.S_IFBLK:
        print("b",end='')
    elif flag == stat.S_IFCHR:
        print("c",end='')
    elif flag == stat.S_IFDIR:
        print("d",end='')
    elif flag == stat.S_IFIFO:
        print("p",end='')
    elif flag == stat.S_IFLNK:
        print("l",end='')
    elif flag == stat.S_IFREG:
        print("-",end='')
    elif flag == stat.S_IFSOCK:
        print("s",end='')

    if stat.S_IRUSR & mode:
        print("r",end='')
    else:
        print("-",end='')

    if stat.S_IWUSR & mode:
        print("w",end='')
    else:
        print("-",end='')

    if stat.S_IXUSR & mode:
        print("x",end='')
    else:
        print("-",end='')

    
    if stat.S_IRGRP & mode:
        print("r",end='')
    else:
        print("-",end='')

    if stat.S_IWGRP & mode:
        print("w",end='')
    else:
        print("-",end='')

    if stat.S_IXGRP & mode:
        print("x",end='')
    else:
        print("-",end='')


    if stat.S_IROTH & mode:
        print("r",end='')
    else:
        print("-",end='')

    if stat.S_IWOTH & mode:
        print("w",end='')
    else:
        print("-",end='')

    if stat.S_IXOTH & mode:
        print("x",end='')
    else:
        print("-",end='')

def get_accesstime(second):
    tm = time.localtime(second)
    print("%d月%4d %02d:%02d "%(tm.tm_mon,tm.tm_mday,
                                                tm.tm_hour,tm.tm_min),end='')

def mydir(path):
    dir = os.listdir(path)
    for i in dir:
        print(i,end='  ')
    print()

def myfile(file1,file2):
    fd = os.open(file2,os.O_RDWR|os.O_CREAT)
    st = os.fstat(fd)

    file_permision(st.st_mode)
    print(" %ld"%st.st_nlink,end=' ')
    pw = pwd.getpwuid(st.st_uid)
    gr = grp.getgrgid(st.st_gid)
    print("%s %s"%(pw.pw_name,gr.gr_name),end=' ')
    print("%4ld"%st.st_size,end=' ')
    get_accesstime(st.st_atime)
    print("%s"%file2)

    os.close(fd)

def dir_file(path,file):
    dir = os.listdir(file)
    for i in dir:
        myfile(path,i)

if  __name__ == '__main__':
    str = sys.argv[1]
    if len(sys.argv) == 2:
        if (("." == str) or ("/" == str) or ("~" == str) or (".." == str)):
            mydir(sys.argv[1])
        else:
            print(sys.argv[1])
    elif ((len(sys.argv) == 3) and ("-l" == str)):
        str = sys.argv[2]
        if (len(str) == 1):
            if ("." == str[0] ):
                dir_file(sys.argv[1],sys.argv[2])
            elif ("/" == str[0] ):
                dir_file(sys.argv[1],sys.argv[2])
            elif ("~" == str[0] ):
                dir_file(sys.argv[1],sys.argv[2])
            else:
                myfile(sys.argv[1],sys.argv[2])
        elif (len(str) == 2):
            if ("." == str[0] and "." == str[1]):
                dir_file(sys.argv[1],sys.argv[2])
            elif ("." == str[0] and "/" == str[1]):
                dir_file(sys.argv[1],sys.argv[2])
            else:
                myfile(sys.argv[1],sys.argv[2])
        else:
            myfile(sys.argv[1],sys.argv[2])
    else:
        print("Erron!")


运行截图:在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值