于是做了一个小程序,可以实现类似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
--------------------------------------------------------------