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,61 @@
+"""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 foo2cmd', 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/foo2.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 foo2.foo2_function foo2cmd")
+        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("foo2cmd hello",
+                substrs = ['foo2 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/foo/foo2.py
===================================================================
--- test/python_api/import/foo/foo2.py	(revision 0)
+++ test/python_api/import/foo/foo2.py	(revision 0)
@@ -0,0 +1,3 @@
+def foo2_function(debugger, args, result, dict):
+	result.Printf("foo2 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 (os.sep in args):
+		modname = args
+		ensure_has_dir_in_path('.')
+	else:
+		endofdir = args.rfind(os.sep)
+		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/customization/import-python/importcmd.py
===================================================================
--- examples/customization/import-python/importcmd.py	(revision 0)
+++ examples/customization/import-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 (os.sep in args):
+		modname = args
+		ensure_has_dir_in_path('.')
+	else:
+		endofdir = args.rfind(os.sep)
+		modname = args[endofdir+1:]
+		args = args[0:endofdir]
+		ensure_has_dir_in_path(args)
+	do_import(debugger,modname)
+	return None
Index: examples/customization/import-python/README
===================================================================
--- examples/customization/import-python/README	(revision 0)
+++ examples/customization/import-python/README	(revision 0)
@@ -0,0 +1,31 @@
+Files in this directory:
+
+o importcmd.py:
+
+Python module which provides implementation for the 'import' command.
+
+o README:
+
+The file you are reading now.
+
+================================================================================
+The import command defined by importcmd.py can be used in LLDB to load a Python
+module given its full pathname.
+The command works by extending Python's sys.path lookup to include the path to
+the module to be imported when required, and then going through the language
+ordinary 'import' mechanism. In this respect, modules imported from LLDB command
+line should not be distinguishable from those imported using the script interpreter. 
+The following terminal output shows an interaction with lldb using this new command.
+
+Enrico-Granatas-MacBook-Pro:Debug enricogranata$ ./lldb
+(lldb) script import importcmd
+(lldb) command script add import -f importcmd.pyimport_cmd
+(lldb) import ../demo.py
+(lldb) script demo.test_function('hello world')
+I am a Python function that says hello world
+(lldb) quit
+Enrico-Granatas-MacBook-Pro:Debug enricogranata$ 
+
+Of course, the commands to import the importcmd.py module and to define the import
+command, can be included in the .lldbinit file to make this feature available at
+debugger startup
