50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
| """Utility for changing directories and execution of commands in a subshell."""
 | |
| 
 | |
| import os, shlex, subprocess
 | |
| 
 | |
| # Store the previous working directory for the 'cd -' command.
 | |
| class Holder:
 | |
|     """Holds the _prev_dir_ class attribute for chdir() function."""
 | |
|     _prev_dir_ = None
 | |
| 
 | |
|     @classmethod
 | |
|     def prev_dir(cls):
 | |
|         return cls._prev_dir_
 | |
| 
 | |
|     @classmethod
 | |
|     def swap(cls, dir):
 | |
|         cls._prev_dir_ = dir
 | |
| 
 | |
| def chdir(debugger, args, result, dict):
 | |
|     """Change the working directory, or cd to ${HOME}.
 | |
|     You can also issue 'cd -' to change to the previous working directory."""
 | |
|     new_dir = args.strip()
 | |
|     if not new_dir:
 | |
|         new_dir = os.path.expanduser('~')
 | |
|     elif new_dir == '-':
 | |
|         if not Holder.prev_dir():
 | |
|             # Bad directory, not changing.
 | |
|             print "bad directory, not changing"
 | |
|             return
 | |
|         else:
 | |
|             new_dir = Holder.prev_dir()
 | |
| 
 | |
|     Holder.swap(os.getcwd())
 | |
|     os.chdir(new_dir)
 | |
|     print "Current working directory: %s" % os.getcwd()
 | |
| 
 | |
| def system(debugger, command_line, result, dict):
 | |
|     """Execute the command (a string) in a subshell."""
 | |
|     args = shlex.split(command_line)
 | |
|     process = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | |
|     output, error = process.communicate()
 | |
|     retcode = process.poll()
 | |
|     if output and error:
 | |
|         print "stdout=>\n", output
 | |
|         print "stderr=>\n", error
 | |
|     elif output:
 | |
|         print output
 | |
|     elif error:
 | |
|         print error
 | |
|     print "retcode:", retcode
 |