gpt4 book ai didi

python - 为 python 目录中的每个模块调用特定函数

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:47 25 4
gpt4 key购买 nike

关于堆栈溢出的答案都没有帮助我解决这个问题: Load module from string in python

我的文件结构如下:-运行.py-/板 -Brd1.py -Brd2.py -Brd3.py

我想要完成的是为 boards 目录中的每个模块调用“运行”函数。每个模块都有这个“运行”功能。这是我在 run.py 中的代码:

import os
import sys,imp
import inspect

for item in os.listdir("boards"):
if item.startswith("Brd") and item.endswith(".py"):
curr_module = imp.new_module(item)
curr_module.run()

这是我得到的错误:

AttributeError: 'module' object has no attribute 'run'

但是,当我明确地做这样的事情时:

from boards import Brd1

Brd1.run()

它工作得很好。有趣的是,代码:

import os
import sys,imp
import inspect

for item in os.listdir("boards"):
if item.startswith("Brd") and item.endswith(".py"):
curr_module = imp.new_module(item)
print dir(curr_module)

只是打印:['__ doc __', '__ name __', '__ package __ ']

有没有办法做我想要完成的事情?我要马上着手处理吗?

最佳答案

这可能对您不起作用,因为正如 abarnert 指出的那样,您只是在加载一个空模块。此外,查看您的文件结构,您需要插入 boards 文件夹的路径名:

sys.path.insert(0, './boards')

只需使用导入内部的 python 文档即可解决您正在尝试的问题:https://docs.python.org/2/library/imp.html#imp.get_suffixes

我刚刚对其进行了测试,这段代码完全符合您的要求:

for item in os.listdir("boards"):
if item.startswith("Brd") and item.endswith(".py"):
name = os.path.splitext(item)[0]
fp, pathname, description = imp.find_module(name)
with open(pathname) as f:
curr_module = imp.load_module(name, fp, pathname, description)
curr_module.run()

关于python - 为 python 目录中的每个模块调用特定函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51432562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com