aboutsummaryrefslogtreecommitdiff
path: root/examples/customization/pwd-cd-and-system/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/customization/pwd-cd-and-system/utils.py')
-rw-r--r--examples/customization/pwd-cd-and-system/utils.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/examples/customization/pwd-cd-and-system/utils.py b/examples/customization/pwd-cd-and-system/utils.py
new file mode 100644
index 000000000000..e975e8869773
--- /dev/null
+++ b/examples/customization/pwd-cd-and-system/utils.py
@@ -0,0 +1,49 @@
+"""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