反射
#!/usr/bin/env python #coding:utf8 import os import sys BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #os.path.abspath(__file__)找到当前文件的绝对路径,os.path.dirname显示上级目录 sys.path.append(BASE_DIR)#把项目的目录作为一个元素加入到python搜索的列表中 if __name__=='__main__': args=sys.argv[1:]#获取传入的参数除了当前脚本名 if len(args) <2: sys.exit("\033[31;1m参数长度不足必须大于2个\033[0m") try: cmd_args=args[1]#获取第一个参数 比如:cmd.run modeule_name,func_name=args[1].split('.')#把传入的命令以点分割 cmd.run分割为列表中的2个元素['cmd','run'] modobj=__import__("modules.{0}".format(modeule_name))#使用__import__以字符串的形式导入包 #<module 'modules' from '/Users/xym/PycharmProjects/s12/day9/modules/__init__.pyc'> #<module 'modules.cmd' from '/Users/xym/PycharmProjects/s12/day9/modules/cmd.py'> modobj=getattr(modobj,modeule_name)#反射 modobj=getattr(包,模块),(modules,cmd) func=getattr(modobj,func_name)#使用反射把传入的传输以字符串的方式动态调用模块中的函数或者类 getattr(modules/cmd,run) func(args)# func==>cmd.run('ls') except Exception,e: print e