2009-07-20 7 views
2

파이썬 프로그램을 실행하면서 파이썬 파일을 만들고 있습니다. 그런 다음이 파일을 가져 와서 정의 된 함수를 실행하려고합니다. 내가 만드는 파일은 경로 변수에 저장되지 않으므로 그대로 유지하는 것이 좋습니다.동적으로 생성 된 파이썬 파일 가져 오기

원래는 execFile(<script_path>) 함수를 호출하고 파일을 실행하여 정의 된 함수를 호출했습니다. 이것은 항상 __name__ == "__main__" 조건에 들어가는 부작용이 있는데, 현재 설정으로는 그럴 수 없습니다.

생성 된 파일을 변경할 수 없습니다. 이미 100 개를 생성 했으므로 수정하지 못했습니다. 생성 된 파일을 호출하는 파일 만 변경할 수 있습니다. 나는 사람에게 제대로 말을 이해한다면 기본적으로 내가 지금 무엇을

...

#<c:\File.py> 
def func(word): 
    print word 

if __name__ == "__main__": 
    print "must only be called from command line" 
    #results in an error when called from CallingFunction.py 
    input = sys.argv[1] 

#<CallingFunction.py> 
#results in Main Condition being called 
execFile("c:\\File.py") 
func("hello world") 
+3

관련없는 팁 : 코드에서 파일 이름에 백 슬래시를 사용하지 마십시오. "c : /file.py"라고 씁니다. Windows에서 작동하며 경로를 파싱하는 모든 것에 대해 훨씬 일관성이 있습니다. –

답변

5

사용

m = __import__("File") 

이 본질적으로

import File 
m = File 
+0

실제로 "내가 만들고있는 파일이 내 경로 변수에 저장되어 있지 않고 계속 저장하려고합니다."라고 말하면 실제로 Halfcent의 문제는 해결되지 않습니다. –

+0

또는 도움이되지 않는 제약 조건을 무시하십시오. 이 파일은 프로젝트의 루트 패키지에있는 다른 모듈의 방해가되지 않도록 서브 패키지에 넣을 수 있습니다. – habnabit

3

을하고 같은입니다 파일이 sys.path에 없기 때문에 오히려 그대로 유지하면됩니다.

import imp 

fileobj, pathname, description = imp.find_module('thefile', 'c:/') 
moduleobj = imp.load_module('thefile', fileobj, pathname, description) 
fileobj.close() 

(물론, 주어진 os.path.spliy와 'thefile.py'및 'thefile.py'수 'thefile에서 :'/를 C ''C /thefile.py ', 당신은 부품을 추출 할 수 있습니다 'with os.path.splitext)

관련 문제