Fork me on GitHub

python实现交互式shell

#! /usr/bin/env python

#coding=utf-8
import sys
import os
import commands
import getpass
import socket
import signal

def handler(signal_num,frame):
print “\nGood bye!”
sys.exit(signal_num)
signal.signal(signal.SIGINT,handler)
oldpwd=commands.getstatusoutput(‘echo $OLDPWD’)[1]
while True:
status,pwd=commands.getstatusoutput(‘pwd’)
s=raw_input(“\033[1;31m”+getpass.getuser()+”@”+socket.gethostname()+”:”+”\033[1;32m”+pwd+”\033[1;0m # “)
try:
if “exit” in s:
print “Good Bye!”
break
t=s.split(‘ ‘)
if t[0]==’cd’:
tmp=commands.getstatusoutput(‘pwd’)[1]
if t[1]==’-‘:
os.chdir(oldpwd)
oldpwd=tmp
continue
path=t[1].split(‘/‘)
if path[0]==’~’:
p2=’/root’
for i in path:
if i==’~’:
break
p2=p2+’/‘+i
os.chdir(p2)
oldpwd=tmp
continue
os.chdir(t[1])
continue
exec(s)
except:
os.system(s)