import os # based on # http://code.activestate.com/recipes/577122-transform-command-line-arguments-to-args-and-kwarg/ def _method_info_from_argv(argv=None): """Command-line -> method call arg processing. - positional args: a b -> method('a', 'b') - intifying args: a 123 -> method('a', 123) - json loading args: a '["pi", 3.14, null]' -> method('a', ['pi', 3.14, None]) - keyword args: a foo=bar -> method('a', foo='bar') - using more of the above 1234 'extras=["r2"]' -> method(1234, extras=["r2"]) @param argv {list} Command line arg list. Defaults to `sys.argv`. @returns (<method-name>, <args>, <kwargs>) """ import json import sys if argv is None: argv = sys.argv file_name, method_name, arg_strs = argv[1], argv[2], argv[3:] args = [] kwargs = {} for s in arg_strs: if s.count('=') == 1: key, value = s.split('=', 1) else: key, value = None, s try: value = json.loads(value) except ValueError: pass if key: kwargs[key] = value else: args.append(value) return file_name, method_name, args, kwargs if __name__ == "__main__": import sys print sys.argv file_name, method_name, args, kwargs = _method_info_from_argv(sys.argv) if file_name.startswith('/'): abs_path = file_name else: abs_path = os.path.join(os.getcwd(),file_name) if not os.path.exists(abs_path): print "Error: {} does not exist".format(abs_path) dirname,file_name = os.path.dirname(abs_path),os.path.basename(abs_path) sys.path.append(dirname) module_name = file_name.rstrip(".py") import importlib module = importlib.import_module(module_name, package=None) print "dir(module)",dir(module) print "module ", module print "globals ", globals() print "getattr(module_name, method_name) ", getattr(module,method_name) if method_name == "main": sys.argv = sys.argv[1:] sys.argv.remove("main") sys.exit(execfile(abs_path)) else: #rv = globals()['module'](method_name)(*args, **kwargs) rv = getattr(module,method_name)(*args,**kwargs) sys.exit(rv)