summaryrefslogtreecommitdiff
path: root/python/helpers/pydev/pydev_run_in_console.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/helpers/pydev/pydev_run_in_console.py')
-rw-r--r--python/helpers/pydev/pydev_run_in_console.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/python/helpers/pydev/pydev_run_in_console.py b/python/helpers/pydev/pydev_run_in_console.py
new file mode 100644
index 000000000000..1b8e1d230175
--- /dev/null
+++ b/python/helpers/pydev/pydev_run_in_console.py
@@ -0,0 +1,83 @@
+
+from pydevconsole import *
+
+import pydev_imports
+
+
+def run_file(file, globals=None, locals=None):
+ if os.path.isdir(file):
+ new_target = os.path.join(file, '__main__.py')
+ if os.path.isfile(new_target):
+ file = new_target
+
+ if globals is None:
+ # patch provided by: Scott Schlesier - when script is run, it does not
+ # use globals from pydevd:
+ # This will prevent the pydevd script from contaminating the namespace for the script to be debugged
+
+ # pretend pydevd is not the main module, and
+ # convince the file to be debugged that it was loaded as main
+ sys.modules['pydevd'] = sys.modules['__main__']
+ sys.modules['pydevd'].__name__ = 'pydevd'
+
+ from imp import new_module
+ m = new_module('__main__')
+ sys.modules['__main__'] = m
+ if hasattr(sys.modules['pydevd'], '__loader__'):
+ setattr(m, '__loader__', getattr(sys.modules['pydevd'], '__loader__'))
+
+ m.__file__ = file
+ globals = m.__dict__
+ try:
+ globals['__builtins__'] = __builtins__
+ except NameError:
+ pass # Not there on Jython...
+
+ if locals is None:
+ locals = globals
+
+
+ print('Running %s'%file)
+ pydev_imports.execfile(file, globals, locals) # execute the script
+
+ return globals
+
+#=======================================================================================================================
+# main
+#=======================================================================================================================
+if __name__ == '__main__':
+ sys.stdin = BaseStdIn()
+ port, client_port = sys.argv[1:3]
+
+ del sys.argv[1]
+ del sys.argv[1]
+
+ file = sys.argv[1]
+
+ import pydev_localhost
+
+ if int(port) == 0 and int(client_port) == 0:
+ (h, p) = pydev_localhost.get_socket_name()
+
+ client_port = p
+
+ host = pydev_localhost.get_localhost()
+
+
+ #replace exit (see comments on method)
+ #note that this does not work in jython!!! (sys method can't be replaced).
+ sys.exit = DoExit
+
+ interpreter = InterpreterInterface(host, int(client_port), threading.currentThread())
+
+ server_thread = threading.Thread(target=start_server,
+ name='ServerThread',
+ args=(host, int(port), interpreter))
+ server_thread.setDaemon(True)
+ server_thread.start()
+
+ globals = run_file(file, None, None)
+
+ interpreter.getNamespace().update(globals)
+
+ process_exec_queue(interpreter) \ No newline at end of file