2013-03-03 1 views
2

OK를로드, 그래서 설명해 주시기 바랍니다 :프로그래밍 내 상황이 조금 복잡하다, 파이썬 모듈/기능을

  • 내 주요 응용 프로그램은
  • 목표 - C/코코아 (OS X의) 형식의 기본 응용 프로그램입니다 이것은 내가 특정 스크립트를 실행하는 "다리"로 사용하고 코드입니다 파이썬 "플러그인"파이썬 프레임 워크

  • 우리는 만들고있어 사용을 사용하여 "확장"된다

    from Foundation import * 
    from AppKit import * 
    
    import imp 
    import sys 
    
    class ppPluginBridge(NSObject): 
        @classmethod 
        def loadModuleAtPath_functionName_arguments_documents_(self, path, func, args,docs): 
    
         f = open(path) 
         try: 
          mod = imp.load_module('plugin', f, path, (".py", "r", imp.PY_SOURCE)) 
          realfunc = getattr(mod, func, None) 
          if realfunc is not None: 
           realfunc(*tuple(args)) 
         except Exception as e: 
          docs.showConsoleError_('%s' % e) 
         finally: 
          f.close() 
          return NO 
    
         return YES 
    

    이 함수는 path에서 스크립트를 가져 와서로드/실행합니다.

    필자가 원하는 것은 파이썬 클래스/함수/모듈을 최종 스크립트 (외부 적으로 또는 바람직하게는 - 내 ppPluginBridge.py 파일에 선언)에서 자동으로 사용할 수있게 만드는 것입니다.

    어떻게 할 수 있습니까?


    (!) 참고 : 파이썬에서 내 경험 최소한의 - 저 너무, 베어! :-)

  • +0

    참고 : ['finally : ... return NO'] (http://ideone.com/91kZPH)는 함수가 항상 'NO'를 반환한다는 것을 의미합니다. – jfs

    답변

    1

    첫째, 더 같은 로딩 뭔가를 할 거라고 :

    이 사용하는
    >>> class Thingus: 
    ...  def __init__(self): 
    ...   module = __import__('string') 
    ...   setattr(self,module.__name__,module) 
    ... 
    >>> thing = thingus() 
    >>> thing.string 
    <module 'string' from '/usr/lib/python2.7/string.pyc'> 
    >>> 
    

    참고 가져 오기 기능을 내장하고 오히려 this.that처럼, 표준 모듈 이름을 가지고 갈 수있다 Python 파일에 대한 직접 경로보다 이것은 더 깨끗합니다. 모듈이 올바른 모듈인지 확인하고 경로 내에 있어야합니다.

    가져올 항목을 지정하는 경우 ppPluginBridge.py에서 목록을 사용하는 것이 가장 좋은 이유는 무엇입니까? 다음과 같이하면됩니다.

    plugin_modules = [ 'plugins.loader', 'plugins.serializer' ] 
    

    ... 또는 무엇을 할 수 있습니다. 파이썬은 매우 표현 적이므로 파이썬 모듈을 설정 파일로 만드는 것은 아무 문제가 없습니다. 물론 구성 파일은 버전 제어 시스템이 기본값을 설정 한 후 제대로 분리되어 개별 설치가 변경할 수 있도록 무시해야합니다.

    관련 문제