python动态导包实现命令行动态调用不同项目
2018-07-19 本文已影响1人
陆_志东
实现的方式是 使用python 内置包 argparse ,学习 argparse 请点击
思想是:
1.使用argparse 获取命令行参数,比如命令行传递的项目名
2.使用动态导包 import(project_name)
3.获取包内不同模块或包 getattr()
实例: 最终目的是通过调用main文件来让不同项目下的test文件执行
当前文件夹下有项目A文件夹 ,项目B文件夹,main.py文件
项目A 文件夹下有 prj 文件夹(包)
test_prj 下有__init__.py文件 有 test.py文件
项目B可以创建和A项目一样的目录,这里就不写了,自己手动创建
test.py文件内容如下:
class A:
def start(self):
print("A项目启动了")
__init__.py文件内容如下
from .test import *
def start():
a1 = A()
a1.start()
那么我如何想要通过main.py文件动态调用项目A启动呢?
方法就是在main.py里面写入
import argparse
parser = argparse.ArgumentParser(description='test __import__ ')
parser.add_argument("--prj_name",dest="prj_name",default="A.prj")
args = parser.parse_args()
prj_name = args.prj_name
prj_module = __import__(prj_name)
test_prj = getattr(prj_module,prj_name.split(".")[-1])
test_prj.start()
下面就是调用命令
在main.py文件夹下
打开终端
输入
启动项目A
python main.py --prj_name "A.prj"
或
python main.py
启动项目B
python main.py --prj_name "B.prj"
这样就使用动态调用不同项目