diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 |
commit | 9e6d35490a6542f9c97607f93c2ef8ca8e03cbcc (patch) | |
tree | dd2a1ddf0476664c2b823409c36cbccd52662ca7 /examples/customization/pwd-cd-and-system | |
parent | 3bd2e91faeb9eeec1aae82c64a3253afff551cfd (diff) |
Notes
Diffstat (limited to 'examples/customization/pwd-cd-and-system')
-rw-r--r-- | examples/customization/pwd-cd-and-system/.lldbinit | 7 | ||||
-rw-r--r-- | examples/customization/pwd-cd-and-system/README | 41 | ||||
-rw-r--r-- | examples/customization/pwd-cd-and-system/utils.py | 49 |
3 files changed, 97 insertions, 0 deletions
diff --git a/examples/customization/pwd-cd-and-system/.lldbinit b/examples/customization/pwd-cd-and-system/.lldbinit new file mode 100644 index 000000000000..f477b5797bec --- /dev/null +++ b/examples/customization/pwd-cd-and-system/.lldbinit @@ -0,0 +1,7 @@ +script import os, sys +# So that ~/utils.py takes precedence. +script sys.path[:0] = [os.path.expanduser('~')] +script import utils +command alias pwd script print os.getcwd() +command script add -f utils.chdir cd +command script add -f utils.system system diff --git a/examples/customization/pwd-cd-and-system/README b/examples/customization/pwd-cd-and-system/README new file mode 100644 index 000000000000..1b67d0b09c01 --- /dev/null +++ b/examples/customization/pwd-cd-and-system/README @@ -0,0 +1,41 @@ +Files in this directory: + +o .lldbinit: + +An example lldb init file that imports the utils.py module and adds the +following commands: 'pwd', 'cd', and 'system'. + +o utils.py: + +Python module which provides implementation for the 'cd' and 'system' commands. + +o README: + +The file you are reading now. + +================================================================================ +The following terminal output shows an interaction with lldb using the .lldbinit +and the utils.py files which are located in my HOME directory. The lldb init +file imports the utils Python module and adds the 'pwd', 'cd', and 'system' +commands. + +Johnnys-MacBook-Pro:multiple_threads johnny$ pwd +/Volumes/data/lldb/svn/trunk/test/functionalities/watchpoint/multiple_threads +Johnnys-MacBook-Pro:multiple_threads johnny$ lldb +(lldb) pwd +/Volumes/data/lldb/svn/trunk/test/functionalities/watchpoint/multiple_threads +(lldb) cd .. +Current working directory: /Volumes/data/lldb/svn/trunk/test/functionalities/watchpoint +(lldb) help system + +Execute the command (a string) in a subshell. +Syntax: system +(lldb) system ls -l +total 0 +drwxr-xr-x 7 johnny admin 238 Oct 11 17:24 hello_watchlocation +drwxr-xr-x 7 johnny admin 238 Oct 11 17:24 hello_watchpoint +drwxr-xr-x 7 johnny admin 238 Oct 11 17:24 multiple_threads +drwxr-xr-x 7 johnny admin 238 Oct 11 17:24 watchpoint_commands + +retcode: 0 +(lldb) 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 |