文档章节

Python练习 os模块 实现一个小shell

hakase
 hakase
发布于 2016/09/29 18:48
字数 458
阅读 42
收藏 1
import sys
import os
import re
import getpass

# os.name 操作系统平台 Windows:'nt'|Linux/Unix:'posix'。
# os.getenv()/os.putenv()读取和设置环境变量。
# os.system()函数用来运行shell命令。
# os.linesep 行终止符 Windows:'\r\n'|Linux:'\n'|Mac:'\r'
# os.path.split() 返回目录名和文件名的tuple

# sys.argv 命令行参数
# sys.platform 获得操作系统类型
# sys.exit(n) 终止程序
# sys.path 搜索模块的路径
# sys.modules 已载入模块
# sys.stdin,sys.stdout,sys.stderr 标准输入/输出/错误输出
# sys.version_info 得到python的版本信息

def os_sys_test():
    print('os.name: ' + os.name)
    print('$PATH: ' + os.getenv('PATH'))
    print('os.linesep: ' + os.linesep)
    print('filename: ' + sys.argv[0])
    print('platform: ' + sys.platform)
    
    print(sys.path)
    #print(sys.modules)
    print(sys.version_info)    

def shell():
    #os_sys_test()
    heading = '''
        #########################################
        #       welcome to hakase shell         #                             
        #           ©copyright  2016            #                           
        #########################################
    '''
    print(heading)
    while True:
        inputCmd = re.split('\s+', input(getpass.getuser() + '@' + os.getcwd() + '$ '))
        cmd = inputCmd[0]
        args = inputCmd[1:]

        if cmd in cmdList:
            cmdList[cmd](args)

def fun_rm(args):
    for path in args:
        if os.path.isfile(path):
            os.remove(path)
        elif os.path.isdir(path):
            lst = os.listdir(path)
            os.chdir(path)
            fun_rm(lst)
            os.chdir('..')
            os.removedirs(path)

def fun_echo(args):
    for str in args:
        print(str, end=' ')
    print()

def fun_cat(args):
    for file in args:
        with open(file, 'r') as f:
            for line in f:
                print(line)

def fun_ls(args):
    if len(args) == 0:
        for file in os.listdir('.'):
            print(file)
    else:
        for path in args:
            for file in os.listdir(path):
                print(file)

def fun_mkdir(args):
    for dir in args:
        if os.path.exists(dir):
            print(dir + ' exist !')
        else:
            os.mkdir(dir)

def fun_cd(args):
    for path in args:
        os.chdir(path)

def fun_pwd(args):
        print(os.getcwd())

def fun_exit(args):
    exit(0)

def fun_touch(args):
    for file in args:
        if os.path.exists(file):
            print(file + ' exist !')
            pass
        else:
            with open(file, 'w') as f:
                pass

def fun_clear(args):
    os.system('clear')

cmdList = {
    'echo' : fun_echo,
    'exit' : fun_exit,
    'cat'  : fun_cat,
    'ls'   : fun_ls,
    'cd'   : fun_cd,
    'pwd'  : fun_pwd,
    'touch': fun_touch,
    'mkdir': fun_mkdir,
    'rm'   : fun_rm,
    'clear': fun_clear
};

if __name__ == '__main__':
    shell()

最简单的方法 只实现shell内部命令 外部命令直接使用外部shell来执行 在Window平台上当然运行不起来..

import os, getpass, re

def fun_cd(args):
    for path in args:
        os.chdir(path)

def fun_echo(args):
    for str in args:
        print(str, end=' ')
    print()

def fun_exit(args):
    exit(0)

cmdList = {
    'echo' : fun_echo,
    'exit' : fun_exit,
    'cd'   : fun_cd
};

while True:
    cmdLine = input(getpass.getuser() + '@' + os.getcwd() + '$ ')
    cmd = re.split('\s+', cmdLine)
    if cmd[0] in cmdList:
        cmdList[cmd[0]](cmd[1:])
    else:
        os.system(cmdLine)

 

 

© 著作权归作者所有

共有 人打赏支持
hakase
粉丝 7
博文 39
码字总数 23663
作品 0
南京
私信 提问
Python中os与sys两模块的区别

前言 os与sys模块的官方解释如下: os: This module provides a portable way of using operating system dependent functionality. 这个模块提供了一种方便的使用操作系统函数的方法。 sys:...

xiaoge2016
2018/04/22
0
0
python中re time os sys模块

re模块 正则表达式 这里写反斜杠也是转义的意思,python在re模块中使用都需要加反斜杠 d 是匹配一个数字 + 大于等于1 w 匹配数字字母下划线和中横杠 * 匹配0个或多个 t 指标符 . 除了回车意外...

飞天喜欢yu
2018/07/01
0
0
用 Python 替代 Bash 脚本

对于Linux用户来说,命令行的名声相当的高。不像其他操作系统,命令行是一个可怕的命题,但是对于Linux社区中那些经验丰富的大牛,命令行却是最值得推荐鼓励使用的。通常,命令行对比图形用户...

葱油拌面
2013/04/10
9.3K
2
为什么Python可以代替shell?python开发

  Shell的功能Python均可实现,而且代码量更少、结构更优、可阅读性更好,而Python可实现的功能Shell却不一定能,如运维中会用到的用于网络通信的Socket模块、用于WEB的Django框架、用于性...

老男孩Linux培训
2018/06/07
0
0
换行符转换脚本(Python)

似乎,需要整理整理使用的python的脚本了: 很简单的一个东西,在'\n'、'\r\n'、'\r'3中换行符之间进行转换。 用法 源码 这只能算是argparse模块和os模块的utime()、stat()、walk()的一个简单...

晨曦之光
2012/05/08
160
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-13(Mybatis基本概念和简单的例子)

在mybatis初次学习Mybatis的时候,遇到了很多问题,虽然阿里云的视频有教学,但是视频教学所使用的软件和我自己使用的软件不用,我自己用的数据库是oracle数据库,开发环境是idea。而且视频中...

白话
今天
4
0
Java基础:String、StringBuffer和StringBuilder的区别

1 String String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。 String类的包含如下定义: /** The value is used for character storage. */private final cha...

watermelon11
今天
2
0
mogodb服务

部署MongoDB 官网: https://www.mongodb.com/download-center/community 创建mongo数据目录 mkdir /data/mongodb 二进制部署 wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x8......

以谁为师
昨天
5
0
大神教你Debian GNU/Linux 9.7 “Stretch” Live和安装镜像开放下载

Debian项目团队于昨天发布了Debian GNU/Linux 9 "Stretch" 的第7个维护版本更新,重点修复了APT软件管理器中存在的安全漏洞。在敦促每位用户尽快升级系统的同时,Debian团队还发布了Debian ...

linux-tao
昨天
4
0
PHP 相关配置

1. php-fpm的pool 编辑php-fpm配置文件php-fpm.con vim /usr/local/php/etc/php-fpm.conf //在[global]部分增加以下内容 include = etc/php-fpm.d/*.conf # 相当与Nginx的虚拟主机文件 “vho......

Yue_Chen
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部