Python3写的小工具,类似Linux的alias给程序起别名

来源:互联网 发布:可以编写c语言的软件 编辑:程序博客网 时间:2024/05/16 11:36
我的电脑上的程序比较多,在桌面上建立快捷方式能排满大半张桌面,想到了Linux的alias很好,

于是做了一个小程序,可以实现类似Linux的alias的作用,能给程序其别名,

环境:windows  Python 3.2.1

源码如下:

-----------------------类alias.py-----2.0--------------------------------

# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# Name:        模块1
# Purpose:
#
# Author:      ChangLiang
#
# Created:     09/04/2012
# Copyright:   (c) ChangLiang 2012
# Licence:     <your licence>
#-------------------------------------------------------------------------------
#!/usr/bin/env python
import configparser
import os
import subprocess
import time
syscmds=['exit','quit','show','alias','help']
class MyRun:
    def __init__(self,ConfigFile):
        # 程序初始化函数
        # 参数 ConfigFile 配置文件
        if not os.path.isfile(ConfigFile):
            print('文件',ConfigFile,'不存在')
        self.cfg = ConfigFile

    def Run(self,Program,Params=None):
        # 运行程序
        # 参数:Program 程序, Params 参数列
        try:
            if Params == None:
                #os.popen3(Program)
                subprocess.Popen(Program)
            else:
                #os.popen(Program+' '+Params)
                subprocess.Popen(Program+' '+Params)
        except Exception as e:
            print('---MyRun:Run 执行错误---')
            print(e)
            #print('执行失败:',Program+' '+Params)

    def cfgRead(self,name=None,attr=None):
        # 读取config文件
        # 参数 nanme 组名, attr 组属性
        # 返回值 如果name不为空 返回所有组名的列表
        #        如name不为空 attr为空 返回name的属性列表
        #        如果name并且attr不为空 返回name的attr属性的值
        if not os.path.isfile(self.cfg):
            print('配置文件不存在')
            return []
        config = configparser.ConfigParser()
        config.readfp(open(self.cfg))
        if name == None:
            return config.sections()
        if attr == None:
            return config.options(name)
            #return config.items(name)
        return config.get(name,attr)

    def cfgWrite(self,name,attr=None,value=None):
        # 添加/更新 组名组内容
        # 参数 nanme 组名, attr 组属性, value属性值
        if not os.path.isfile(self.cfg):
            print('配置文件不存在,创建文件',self.cfg)
            f = open(self.cfg,'a')
            #f.write(';; 使用配置文件来存储常用简写命令')
            f.close()
        config = configparser.ConfigParser()
        config.readfp(open(self.cfg))
        if name not in config.sections():
            config.add_section(name)
        if (not attr is None) and (not value is None):
        #if attr not in config.options(name):
            config.set(name,attr,value)
        if (not attr is None) and (value is None):
            config.set(name,attr,'')

        #config.add_section(name)
        #config.set(name, attr, value)
        #config.write(open(self.cfg, "w"))
        config.write(open(self.cfg, "r+"))
    def AliasRun(self,ShortName):
        # 执行简写所指的程序
        # 参数 ShortName 程序简写,即组名
        # 返回值  如果ShortName不在配置文件中 返回0
        #         如果ShortName在配置文件中则执行程序,返回1
        #print(self.cfgRead())
        if ShortName not in self.cfgRead():
            print('简称',ShortName,'不存在')
            return 0
        command = self.cfgRead(ShortName,'command')
        params = self.cfgRead(ShortName,'params')
        self.Run(command,params)
        return 1

    def AliasAdd(self):
        # 增加一个程序简写组
        ShortName = input('简写:')
        ShortName = ShortName.strip()
        while ShortName in syscmds:
            print('系统预留命令不可作为命令简写')
            print('系统预留:',syscmds)
            ShortName = input('简写:')
            ShortName = ShortName.strip()
        if ShortName=='':
            return
        command = input('程序:')
        command = command.strip()
        if command=='':
            return
        self.cfgWrite(ShortName,'command',command)
        params = input('参数:')
        self.cfgWrite(ShortName,'params',params)
        describe = input('描述:')
        self.cfgWrite(ShortName,'describe',describe)

def main():
    mr = MyRun('commandlist.ini')
    # TestList
    #ss1 = mr.cfgRead('host','smtp_server')
    #ss1 = mr.cfgRead('host')
    #ss1 = mr.Run('cmd')
    #ss1 = mr.cfgWrite('MyName1','aa','mm2')
    #ss1 = mr.cfgWrite('MyName2','aa','mm')
    #ss1 = mr.AliasAdd()
    #ss1 = mr.AliasRun('ees')
    #print(ss1)
    print('help','可查看帮助')
    cmd = input('>>')
    cmd = cmd.strip()
    while cmd not in ['exit','quit']:
        if cmd in mr.cfgRead():
            mr.AliasRun(cmd)
            break
        elif cmd == 'alias': # 增加新简写命令
            mr.AliasAdd()
        elif cmd=='show' or cmd.startswith('show '):
            cmd = cmd.replace('\t',' ')
            cmdlist1 = cmd.split(' ')
            cmdlist = []
            for i in cmdlist1:
                if i != '':
                    cmdlist.append(i)
            if len(cmdlist)==1:
                aliaslist = mr.cfgRead()
                aliaslist.sort()
                l = 0
                for i in aliaslist:
                    l = max(l,len(i))
                #print('长度',l)
                for i in aliaslist:
                    print('[ '+i.ljust(l,' ')+' ] ',mr.cfgRead(i,'describe'))
                print('共',len(aliaslist),'个简称程序')

            elif len(cmdlist)==2:
                if cmdlist[1] in mr.cfgRead():
                    print('[',cmdlist[1],']')
                    print('command','=',mr.cfgRead(cmdlist[1],'command'))
                    print('params','=',mr.cfgRead(cmdlist[1],'params'))
                    print('describe','=',mr.cfgRead(cmdlist[1],'describe'))
                else:
                    print('不存在名为[',cmdlist[1],']的简写命令')
            elif len(cmdlist)==3:
                if cmdlist[1] in mr.cfgRead():
                    if cmdlist[2] in mr.cfgRead(cmdlist[1]):
                        print('[',cmdlist[1],']')
                        print(cmdlist[2],'=',mr.cfgRead(cmdlist[1],cmdlist[2]))
                    else:
                        print('[',cmdlist[1],']','没有属性',cmdlist[2])
                else:
                    print('不存在名为[',cmdlist[1],']的简写命令')
            elif len(cmdlist)>3:
                print('警告: show命令参数大于2个,前2个参数有效')
                if cmdlist[1] in mr.cfgRead():
                    if cmdlist[2] in mr.cfgRead(cmdlist[1]):
                        print('[',cmdlist[1],']')
                        print(cmdlist[2],'=',mr.cfgRead(cmdlist[1],cmdlist[2]))
                    else:
                        print('[',cmdlist[1],']','没有属性',cmdlist[2])
                else:
                    print('不存在名为[',cmdlist[1],']的简写命令')
            else:
                print('我靠,特殊情况出现了!')
        elif cmd == 'help':
            print('exit','退出程序')
            print('show [简写[ 属性]','显示简写命令及参数内容')
            print('help','帮助')
        else:
            print('[',cmd,']','命令无效')
        cmd = input('>>')
        cmd = cmd.strip()

if __name__ == '__main__':
    main()
    print('edit by changliang,email:shdzhqxzh@163.com')
    time.sleep(2)

 

-----------------------类alias.py-----1.0--------------------------------

from subprocess import *
import time
processdirc={}
cmdfilename = '命令列表.txt'
syscmd = ['exit','help','showall','alias','list','del']
#加载命令
def loadcmd():
    processdirc.clear()
    cmdfile=open(cmdfilename)
    line = cmdfile.readline()
    while len(line):
        #line去掉'\r' '\n'
        line=line.replace('\n','')
        line=line.replace('\r','')
       
        stl = line.split('\t')
        #stl清除'' '\t' ' '
        for s in reversed(stl):
            if s == '' or s=='\t':
                stl.remove(s)
        #print(len(stl),stl)
        #将命令添加到命令队列中去
        if len(stl) > 1:
            processdirc[stl[0]]=stl[1]
        elif len(stl) == 1:
            processdirc[stl[0]]=''
        line = cmdfile.readline()
    cmdfile.close()

def main ():
    loadcmd()
    while True:
        command = input('请输入命令:')
        command = command.replace('\r','')
        if command == syscmd[0]:  #exit
            break
        elif command == syscmd[1]:  #help
            print('help帮助 open 作者:常亮 时间:2011年9月9日22:19:52')
            print('alias:添加命令')
            print('showall:显示所有命令')
            print('list:排序显示,此命令现在不起作用')
            print('del xx:删除xx')
        elif command == syscmd[2]:  #showall
            print('命令','\t 程序')
            for cmd in processdirc.keys():
                print(cmd,'\t',processdirc[cmd])
            continue
        elif command == syscmd[3]:  #alias
            bcmdexit = 1
            while bcmdexit:               
                s1 = input('简写:')
                s1 = s1.replace(' ','')
                s1 = s1.replace('\t','')
                s1 = s1.replace('\r','')
                if len(s1)==0:
                    continue
                if s1 == 'exit':
                    exit(0)
                elif s1 in syscmd:
                    print('系统命令,不得替换')
                elif s1 in processdirc.keys():
                    print('命令"'+s1+'"已经存在,目标:"'+processdirc[s1]+'"\n请更换名称或输入"exit"退出')
                else:
                    bcmdexit = 0
            s2 = input('程序:')
            f = open(cmdfilename,'a')
            if s2.find('\n') == -1:
                s2=s2+'\n'
            print('添加命令:'+s1+'\t'+s2)
            f.write(s1+'\t'+s2)
            f.close()
            loadcmd()
        elif command == syscmd[4]: #list
            f = open(cmdfilename,'r')
            flien = f.readline()
            allt = []
            while len(flien)>0:
                allt.append(flien)
                flien = f.readline()
            f.close()
            f = open(cmdfilename,'w')
            f.write('')
            f.close()
            allt.sort()
            f = open(cmdfilename,'a')
            print('简写\t程序')
            for line in allt:
                print(line,end='')
                f.write(line)
            f.close()
            loadcmd()
        elif command[0:len(syscmd[5])] == syscmd[5]: #del
            f = open(cmdfilename,'r')
            flien = f.readline()
            allt = []
            while len(flien)>0:
                allt.append(flien)
                flien = f.readline()
            f.close()
            f = open(cmdfilename,'w')
            f.write('')
            f.close()
            xx = command[len(syscmd[5]):]
            #print(xx,len(xx),'111',type(xx))
            #for i in range(len(xx)):
                #if xx[0]==' ' or xx[0]=='\t':
                    #xx=xx[1:]
            xx=xx.replace(' ','')
            xx=xx.replace('\t','')
            xx=xx.replace('\r','')
            #print(xx,len(xx))
            f = open(cmdfilename,'a')
            for line in allt:
                if line[0:len(xx)+1] != xx+'\t':
                    f.write(line)
                else:
                    print('删除了',line)
            f.close()
            loadcmd()
        elif command in processdirc.keys():
            try:
                p = Popen(processdirc[command])
            except:
                print('执行命令失败,请检查目标"'+processdirc[command]+'"是否存在')
                continue
            break
        else:
            print('没找到命令:',command)
            print('help:显示所有命令')
            #time.sleep(4)
        #p.wait()
        #p.kill()
if __name__ == '__main__':
    main()
    print('open结束')
    time.sleep(1)

---------------------------------命令列表.txt--------------------------------------------------

qq D:\Program Files\Tencent\QQ\Bin\QQ.exe

--------------------------------------------------------------

原创粉丝点击