Index: test/functionalities/command_python/TestCommandPython.py
===================================================================
--- test/functionalities/command_python/TestCommandPython.py	(revision 141772)
+++ test/functionalities/command_python/TestCommandPython.py	(working copy)
@@ -27,6 +27,16 @@
 
         self.runCmd("command source py_import")
 
+        # This is the function to remove the custom commands in order to have a
+        # clean slate for the next test case.
+        def cleanup():
+            self.runCmd('command script delete welcome', check=False)
+            self.runCmd('command script delete targetname', check=False)
+            self.runCmd('command script delete longwait', check=False)
+
+        # Execute the cleanup function during test case tear down.
+        self.addTearDownHook(cleanup)
+
         # We don't want to display the stdout if not in TraceOn() mode.
         if not self.TraceOn():
             self.HideStdout()
Index: test/python_api/import/TestImport.py
===================================================================
--- test/python_api/import/TestImport.py	(revision 0)
+++ test/python_api/import/TestImport.py	(revision 0)
@@ -0,0 +1,56 @@
+"""Test custom import command to import files by path."""
+
+import os, sys, time
+import unittest2
+import lldb
+from lldbtest import *
+
+class ImportTestCase(TestBase):
+
+    mydir = os.path.join("python_api", "import")
+
+    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
+    @python_api_test
+    def test_import_command(self):
+        """Import some Python scripts by path and test them"""
+        self.run_test()
+
+    def setUp(self):
+        # Call super's setUp().
+        TestBase.setUp(self)
+
+    def run_test(self):
+        """Import some Python scripts by path and test them."""
+
+        # This is the function to remove the custom commands in order to have a
+        # clean slate for the next test case.
+        def cleanup():
+            self.runCmd('command script delete import', check=False)
+            self.runCmd('command script delete foocmd', check=False)
+            self.runCmd('command script delete foobarcmd', check=False)
+            self.runCmd('command script delete barcmd', check=False)
+
+        # Execute the cleanup function during test case tear down.
+        self.addTearDownHook(cleanup)
+
+        self.runCmd("script import importcmd")
+        self.runCmd("command script add -f importcmd.pyimport_cmd import")
+        self.runCmd("import ./foo/foo.py")
+        self.runCmd("import ./foo/bar/foobar.py")
+        self.runCmd("import ./bar/bar.py")
+        self.runCmd("command script add -f foo.foo_function foocmd")
+        self.runCmd("command script add -f foobar.foo_function foobarcmd")
+        self.runCmd("command script add -f bar.bar_function barcmd")
+        self.expect("foocmd hello",
+                substrs = ['foo says', 'hello'])
+        self.expect("barcmd hello",
+                substrs = ['barutil says', 'bar told me', 'hello'])
+        self.expect("foobarcmd hello",
+                substrs = ['foobar says', 'hello'])
+
+
+if __name__ == '__main__':
+    import atexit
+    lldb.SBDebugger.Initialize()
+    atexit.register(lambda: lldb.SBDebugger.Terminate())
+    unittest2.main()
Index: test/python_api/import/foo/bar/foobar.py
===================================================================
--- test/python_api/import/foo/bar/foobar.py	(revision 0)
+++ test/python_api/import/foo/bar/foobar.py	(revision 0)
@@ -0,0 +1,3 @@
+def foo_function(debugger, args, result, dict):
+	result.Printf("foobar says " + args)
+	return None
Index: test/python_api/import/foo/foo.py
===================================================================
--- test/python_api/import/foo/foo.py	(revision 0)
+++ test/python_api/import/foo/foo.py	(revision 0)
@@ -0,0 +1,3 @@
+def foo_function(debugger, args, result, dict):
+	result.Printf("foo says " + args)
+	return None
Index: test/python_api/import/bar/barutil.py
===================================================================
--- test/python_api/import/bar/barutil.py	(revision 0)
+++ test/python_api/import/bar/barutil.py	(revision 0)
@@ -0,0 +1,2 @@
+def barutil_function(x):
+	return "barutil says: " + x
Index: test/python_api/import/bar/bar.py
===================================================================
--- test/python_api/import/bar/bar.py	(revision 0)
+++ test/python_api/import/bar/bar.py	(revision 0)
@@ -0,0 +1,4 @@
+import barutil
+def bar_function(debugger, args, result, dict):
+	result.Printf(barutil.barutil_function("bar told me " + args))
+	return None
Index: test/python_api/import/importcmd.py
===================================================================
--- test/python_api/import/importcmd.py	(revision 0)
+++ test/python_api/import/importcmd.py	(revision 0)
@@ -0,0 +1,30 @@
+import sys,os,lldb
+def check_has_dir_in_path(dirname):
+	return sys.path.__contains__(dirname);
+
+def ensure_has_dir_in_path(dirname):
+	dirname = os.path.abspath(dirname)
+	if not (check_has_dir_in_path(dirname)):
+		sys.path.append(dirname);	
+
+def do_import(debugger,modname):
+	if (len(modname) > 4 and modname[-4:] == '.pyc'):
+		modname = modname[:-4]
+	if (len(modname) > 3 and modname[-3:] == '.py'):
+		modname = modname[:-3]
+	debugger.HandleCommand("script import " + modname)
+
+def pyimport_cmd(debugger, args, result, dict):
+	"""Import a Python module given its full path"""
+	if args == "":
+		return "no module path given";
+	if not ("/" in args):
+		modname = args
+		ensure_has_dir_in_path('.')
+	else:
+		endofdir = args.rfind('/')
+		modname = args[endofdir+1:]
+		args = args[0:endofdir]
+		ensure_has_dir_in_path(args)
+	do_import(debugger,modname)
+	return None
Index: test/python_api/import/main.c
===================================================================
--- test/python_api/import/main.c	(revision 0)
+++ test/python_api/import/main.c	(revision 0)
@@ -0,0 +1,15 @@
+#include <stdio.h>
+
+int main(int argc, char const *argv[]) {
+    printf("Hello world.\n"); // Set break point at this line.
+    if (argc == 1)
+        return 0;
+
+    // Waiting to be attached by the debugger, otherwise.
+    char line[100];
+    while (fgets(line, sizeof(line), stdin)) { // Waiting to be attached...
+        printf("input line=>%s\n", line);
+    }
+
+    printf("Exiting now\n");
+}
Index: test/python_api/import/Makefile
===================================================================
--- test/python_api/import/Makefile	(revision 0)
+++ test/python_api/import/Makefile	(revision 0)
@@ -0,0 +1,6 @@
+LEVEL = ../../make
+
+C_SOURCES := main.c
+EXE := hello_world
+
+include $(LEVEL)/Makefile.rules
Index: examples/python/importcmd.py
===================================================================
--- examples/python/importcmd.py	(revision 0)
+++ examples/python/importcmd.py	(revision 0)
@@ -0,0 +1,30 @@
+import sys,os,lldb
+def check_has_dir_in_path(dirname):
+	return sys.path.__contains__(dirname);
+
+def ensure_has_dir_in_path(dirname):
+	dirname = os.path.abspath(dirname)
+	if not (check_has_dir_in_path(dirname)):
+		sys.path.append(dirname);	
+
+def do_import(debugger,modname):
+	if (len(modname) > 4 and modname[-4:] == '.pyc'):
+		modname = modname[:-4]
+	if (len(modname) > 3 and modname[-3:] == '.py'):
+		modname = modname[:-3]
+	debugger.HandleCommand("script import " + modname)
+
+def pyimport_cmd(debugger, args, result, dict):
+	"""Import a Python module given its full path"""
+	if args == "":
+		return "no module path given";
+	if not ("/" in args):
+		modname = args
+		ensure_has_dir_in_path('.')
+	else:
+		endofdir = args.rfind('/')
+		modname = args[endofdir+1:]
+		args = args[0:endofdir]
+		ensure_has_dir_in_path(args)
+	do_import(debugger,modname)
+	return None
