如何在同一目录python中动态加载文件

时间:2015-04-20 14:59:26

标签: python python-2.7

我是新手,因此非常感谢任何指导 我有一个目录结构:

/testcases
 __init__.py, testcases_int/     
                  tc1.py,tc2.py,__init__.py,run.py

我的目的是运行每个tc1.py,tc2.py .. tc(x).py(x =将根据需要添加新文件)run.py 我在run.py和tcx.py中有现有代码:

#!/usr/bin/env python
import os,glob,subprocess
for name in glob.glob('tc*.py'):
  cmd = 'python name'
  subprocess.call(cmd)

#!/usr/bin/env python
import os,fabric,sys
class tc(object):
  def __init__(self):
     .....
  def step1(self):
     .....
  def step2(self):
     .....
  def runner(self):
     self.step1()
     self.step2()   

但是我不打算像上面那样运行它,而是想将tc(x).py的类导入run.py并调用' runner'每个tc(x).py类的方法

我可以将tc1.py,tc2.py中的每一个静态导入run.py,但是这个目录会随着tc(x).py文件的增长而继续增长,因此我希望每次执行run.py时: - 它将动态加载所有tc(x).py - 实例化tc(x).py的类 - 调用其跑步者'方法

非常感谢提前

3 个答案:

答案 0 :(得分:0)

现在是查看unittestnose模块以处理测试的好时机。两者都提供了基于(除其他外)文件名称自动发现新测试的简单方法。例如,所有以tctest_开头的文件。

答案 1 :(得分:0)

我建议像payhima所说的那样查看unittest(和类似的)模块,但是如果你想这样做,下面的内容并不是特别优雅,但是如果你能做的话可以用于我的有限测试将运行脚本放在testcases目录中。

文件夹布局

testcases/
|-- run.py
`-- tests
    |-- __init__.py
    |-- tc1.py
    `-- tc2.py
run.py
import tests
from tests import *

for tc in tests.__all__:
    getattr(tests,tc).tc().runner()
__init__.py
import glob, os
modules = glob.glob(os.path.dirname(__file__)+"/tc*.py")
__all__ = [ os.path.basename(f)[:-3] for f in modules ]

答案 2 :(得分:0)

在main run方法中,您可以从目录中获取所有文件 How to list all files of a directory? 在循环中使用这样的东西:

for class_name in list_:
   import class_name
   runner_method = getattr(class_name, "runner", None) # if it staticmethod
   if callable(runner_method): 
      runner_method()

或者您可以使用__all__中的__init__.py来使用import *