python每日小程序5 用python实现一个shell

本文介绍了一个使用Python标准库pathlib实现的简易Linux风格命令行界面,支持cd、ls、pwd、touch和mkdir命令,用于文件和目录的基本操作。

原理

在linux中可以使用cd ls touch mkdir等命令快速的对目录和文件进行操作,python标准库中提供了对路径的操作模块,我们可以用它来模拟实现linux终端的部分功能

使用的模块

pathlib

截图

在这里插入图片描述

代码

函数都写了注释,不明白的可以留言或私聊

from pathlib import *

class myShell(object):
    '''
    实现关于文件有关的操作
    cd ls pwd 
    touch
    mkdir 

    '''
    def __init__(self):
        '''
        初始化实例变量,cur为当前的路径
        '''
        self.cur = Path('.')

    def main(self):
        '''
        用来开启主循环
        '''
        while True:
            self.input_handle()

    def input_handle(self):
        '''
        获得输入,并传入函数处理
        '''
        a = input(f'kalpe:{self.cur.resolve()} >>')
        b = a.split(' ')
        if a == 'ls':
            self._ls()
        if a == 'pwd':
            self._pwd()
        if b[0] == 'cd':
            self._cd(b)
        if b[0] == 'touch':
            self._touch(b)
        if b[0] == 'mkdir':
            self._mkdir(b)

    def _ls(self):
        '''
        显示当前路径下的文件和文件和文件夹
        '''
        for i in self.cur.iterdir():
            print(i)

    def _pwd(self):
        '''
        获得当前的路径
        '''
        self.cur = self.cur.cwd()
        print(self.cur)

    def _cd(self,arg):
        '''
        切换目录
        '''
        if len(arg) != 2:
            tip = '''
            你输入的格式有误,命名格式: 
                cd 路径
            例子:
                cd .
                cd ..
                cd /home
            '''
            print(tip)
            return 0
        #当前目录,即不用切换
        if arg[1] == '.':
            return 1
        #上一层目录
        elif arg[1] == '..':
            self.cur  = self.cur.parent
            return 1
        #指定路径,利用一个临时的a,先检查是否存在,然后替换self.cur
        else:
            a = Path(arg[1])
            if a.exists():
                self.cur = a
            else:
                print('你输入的文件/目录不存在')

    def _touch(self,arg):
        '''
        创建一个文件
        '''
        if len(arg) < 2:
            tip = '''
            你的输入格式有误,命令使用:
                touch filename
            例子:
                touch 1
                touch 1 2 3
            '''
            print(tip)
        for i in arg[1:]:
            a = Path(i)
            try:
                a.touch(mode=0o666,exist_ok=False)
            except FileExistsError:
                b = input(f'文件{i}已存在,是否需要覆盖(y/n):')
                if b == 'y' or b == 'Y':
                    a.touch(mode=0o666,exist_ok=True)
                    print('覆盖完成...')

    def _mkdir(self,arg):
        '''
        创建一个目录,类似创建文件,代码也类似
        '''
        if len(arg) < 2:
            tip = '''
            你的输入格式有误,命令使用:
                mkdir filename
            例子:
                mkdir 1
                mkdir 1 2 3
            '''
            print(tip)
        for i in arg[1:]:
            a = Path(i)
            try:
                a.mkdir(mode=0o777,exist_ok=False)
            except FileExistsError:
                b = input(f'目录{i}已存在,是否需要覆盖(y/n):')
                if b == 'y' or b == 'Y':
                    a.mkdir(mode=0o777,exist_ok=True)
                    print('覆盖完成...')

if __name__ == "__main__":
    a = myShell()
    a.main()
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值