#!/usr/bin/python # -*- Coding: utf-8 -*- import os import sys import time class Command(object): keywords = ['exit', 'cd'] def __init__(self, line): self.argv = line.split() def sync_run(self): if self.argv[0] in self.keywords: getattr(self, "do_%s" % self.argv[0])() else: pid = os.fork() if pid ==0: try: os.execvp(self.argv[0], self.argv) except OSError: print >>sys.stderr,\ "command not found: %s" \ % self.argv[0] sys.exit(0) else: print "Wait for child (%d)" % pid res = os.wait() print "(%d) child quit with %d" % res def do_cd(self): if len(self.argv) == 1: os.chdir(os.environ.get("HOME")) else: try: os.chdir(self.argv[1]) except OSError: print >>sys.stderr,\ "cd: no such file or directory: %s" \ % self.argv[1] def do_exit(self): sys.exit(0) while True: cmd = raw_input('$ ').strip() if cmd == "": continue Command(cmd).sync_run()