2012-04-24 3 views
1

일부 시뮬레이션을 실행하는 Python 스크립트를 작성하고 있지만 입력 매개 변수가 많이 (약 20 개) 필요합니다. 그래서 나는 모든 시뮬레이션 파라미터를 외부 파일에 포함시킬 생각을하고있었습니다. 이 작업을 수행하는 가장 쉬운 방법은 무엇입니까? 내가 찾은파이썬에서 외부 파일 포함하기

한 대답은 파일 parm.py의 모든 시뮬레이션 매개 변수를 넣고 쳤 패키지를 사용하여 해당 모듈을 수입, 스택 오버플로 질문 How to import a module given the full path?했다.

이렇게하면이 스크립트를 실행하는 사용자가 모든 파일을 입력으로 제공 할 수 있습니다. 나는 그런 식으로 모듈을 가져 오는 경우 :

parm = imp.load_source('parm', '/path/to/parm.py') 

이 모든 매개 변수가 그러나

parm.p1, parm.p2 

로 참조 할 필요가, 난 그냥 등 P1, P2,로 참조하고 싶은 내 스크립트. 그렇게 할 수있는 방법이 있습니까?

+2

을 당신은 "수입 *"같은 뭔가를 찾고있다 - 좋은 방법이 아닙니다. . http://stackoverflow.com/questions/2360724/in-python-what-exactly-does-import-import에서 답변을 참조하십시오. – gimel

+0

해결책 :하지 마십시오. 어쨌든 코드를 통해 추적하는 것이 훨씬 어려워 지므로 일반적으로 가져 오기에서 가져 오기를 수행하면 안됩니다. –

+0

사용자가 시뮬레이션을위한 매개 변수 목록을 제공하고 그가 제공하지 않는 매개 변수에 대해 기본값이 사용되기를 원합니다. 그래서 나는 매개 변수에 대한 모든 디폴트 값을 할당하는 코드를 실행 한 다음 사용자가 제공 한 모든 변수를 무시하는 execfile ('parm.py')을 수행하려고합니다. 이 일을 더 우아한 방법이 있습니까? – Spot

답변

7

외부 파일에서 임의 코드를 가져 오는 것은 좋지 않습니다.

구성 파일에 매개 변수를 넣고 그것을 읽을 파이썬의 ConfigParser 모듈을 사용하십시오

예를 들어 :

==> multipliers.ini <== 
[parameters] 
p1=3 
p2=4 

==> multipliers.py <== 
#!/usr/bin/env python 

import ConfigParser 

config = ConfigParser.SafeConfigParser() 
config.read('multipliers.ini') 


p1 = config.getint('parameters', 'p1') 
p2 = config.getint('parameters', 'p2') 

print p1 * p2 
+1

단지 내가 뭘 찾고 있었는지, 감사합니다! – Spot

1

이 경우 execfile()을 사용할 수 있지만 다른 방법을 고려해야합니다.

+0

이 작업을 수행하는 간단한 방법이 있습니까? 잠시 동안 나는 커맨드 라인에서 그것들을 인수로서 전달하려고 생각하고 있었지만 너무 많은 것들이있다. – Spot

+0

@ 스팟 : 네, 저기 [내 대답] (참조 http://stackoverflow.com/a/10292160/78845) – Johnsyweb

관련 문제