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!")
运行截图: