65 lines
1.4 KiB
Python
65 lines
1.4 KiB
Python
#! /bin/env python3
|
|
# encoding: utf-8
|
|
|
|
import imp
|
|
import os
|
|
|
|
# --------------------------------------------------
|
|
|
|
def import_module(path):
|
|
'''
|
|
Imports a python file as a module. The path can be relative or absolute.
|
|
|
|
Based on the work of Yuval Greenfield released into the public domain.
|
|
'''
|
|
|
|
# remove the .py suffix
|
|
mod_dn = os.path.dirname(path)
|
|
mod_fn = os.path.basename(path)
|
|
|
|
if mod_fn.endswith('.py'):
|
|
mod_name = mod_fn[:-3]
|
|
else:
|
|
# packages for example
|
|
mod_name = mod_fn
|
|
|
|
fd = None
|
|
|
|
try:
|
|
data = imp.find_module(mod_name, [mod_dn])
|
|
module = imp.load_module(mod_name, *data)
|
|
fd = data[0]
|
|
|
|
finally:
|
|
if fd is not None:
|
|
fd.close()
|
|
|
|
return module
|
|
|
|
# --------------------------------------------------
|
|
|
|
def batch_gen(data, batch_size):
|
|
'''
|
|
Split data (a sequence) into sequences batch_size elements long.
|
|
'''
|
|
|
|
for i in range(0, len(data), batch_size):
|
|
yield data[i:i+batch_size]
|
|
|
|
# --------------------------------------------------
|
|
|
|
def console(environment, tab_completion=False):
|
|
'''
|
|
Opens up a Python console.
|
|
|
|
environment is a dictionary typically returned by locals() or similar
|
|
tab_completion enables completion of object names using TAB, however note
|
|
that this will make pasting formatted snippets of code difficult
|
|
'''
|
|
|
|
import code, readline, rlcompleter
|
|
|
|
readline.parse_and_bind('tab: complete')
|
|
|
|
c = code.InteractiveConsole(environment)
|
|
c.interact(banner='')
|