我有一些这样的模块:
Drivers/
a.py
b.py
c.py
现在我想根据变量值来调用它们。 让我们考虑驱动程序是变量名称的变量。
if driver=='a':
#then call the driver a and execute.
a.somefunction()
if driver=='b':
#then call the driver b and execute
我知道if语句中的驱动程序的值是字符串类型值,而if语句中我们必须调用模块。 有没有办法转换它。??
答案 0 :(得分:5)
如果您在python的搜索路径中的“Drivers /”目录,只需导入模块并调用该函数:
import importlib
module = importlib.import_module(driver)
module.some_function()
答案 1 :(得分:2)
如果模块处于同一级别(完全是您的情况),只需
module = __import__(driver)
module.somefunction()
driver
可以是string
,例如'a'
,'b'
或'c'
。如果该模块不存在,则会引发ImportError
。
答案 2 :(得分:1)
这是另一种方法:
def default_action():
print('I will do this by default')
return 42
the_function = default_action
if driver == 'a':
from a import somefunction as the_function
if driver == 'b':
from b import some_other_function as the_function
if driver == 'c':
from c import some_other_function as the_function
print('Running the code ... ')
result = the_function()
print('Result is: {}'.format(result))
您必须确保Drivers/
变量中PYTHONPATH
的完整路径。
答案 3 :(得分:0)
或者你可以使用它:
import imp
py_mod = imp.load_module(driver, *imp.find_module(driver, ['Drivers']))
答案 4 :(得分:0)
您应该在此处阅读有关模块搜索路径的信息: https://docs.python.org/2/tutorial/modules.html#the-module-search-path
此讨论显示如何将字符串转换为命令: http://www.daniweb.com/software-development/python/threads/198082/converting-string-to-python-code
您案例的基本示例如下:
假设a和b是root中的linux目录
import sys
import os
if driver=='a':
# add /a to the module search path
sys.path.append(os.path.join(['/', driver]))
command_string = 'import ' + driver + '.py'
# converts a string to python command
exec(command_string)
#then call the driver a and execute.
a.somefunction()
if driver=='b':
sys.path.append(os.path.join(['/', driver]))
command_string = 'import ' + driver + '.py'
# converts a string to python command
exec(command_string)
#then call the driver b and execute