LINUX.ORG.RU

python plugin


0

0

хотелось бы написать программку на питоне, чтоб она из опредлённой директории хватала плагины и использовала их, плагины также на питоне...

может ткнёте меня в программки, в которых реализован этот механизм? насколько я понимаю через import это не проходит.

★★

Ответ на: комментарий от no1sm

ну ясно execfile это типа source в sh

no1sm ★★
() автор топика
Ответ на: комментарий от kosmonavt

а __import__ вроде тоже подходит

no1sm ★★
() автор топика
Ответ на: комментарий от kosmonavt

2kosmonavt вот вроде написал чего-то, что скажешь?

#!/usr/bin/env python                                                           
                                                                                
import glob                                                                     
import re                                                                       
import sys                                                                      
                                                                                
class Modules:                                                                  
    def __init__(self):                                                         
        self.modules = []                                                       
                                                                                
    def load(self, dir):                                                        
        for i in glob.glob(dir + '/*.py'):                                      
            try:                                                                
                x = __import__(re.sub('\.py$', '', i))                          
                self.modules.append(x)                                          
            except ImportError:                                                 
                pass                                                            
                                                                                
    def call(self, x):                                                          
        for m in self.modules:                                                  
            try:                                                                
                exec 'm.' + x + '()'                                            
            except:                                                             
                pass                                                            
                                                                                
m = Modules()                                                                   
m.load('plugins')                                                               
m.call('bell')                                                                  

no1sm ★★
() автор топика
Ответ на: комментарий от no1sm

> exec 'm.' + x + '()'

это тормозно, делай что-то вроде getattr(m,x)(), еще лучше заранее сохранить обьект функции в переменной

anonymous
()
Ответ на: комментарий от kosmonavt

__import__

>>допустим у меня имя модуля лежит в переменной foo как мне его импортировать?

>foo='sys'
>exec 'import '+foo

Лучше обойтись без извращений с exec:

__import__(foo)

DKorolkov
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.