2010-04-21 3 views
2

파이썬에서 C의 전처리 기 기능을 모방해야합니다. 내가 디버그 버전을 실행하려면 C파이썬/루비가있는 미믹 C 프리 프로세서?

#ifdef DEBUG 
printf(...) 
#endif 

난 그냥 또는 해제를 실행하는 데 -DDEBUG 또는 유사한을 사용하여 다음과 같이

, 내가 사용합니다.

파이썬/루비에는 어떤 방법을 사용할 수 있습니까? 내 말은, 프로젝트의 모든 스크립트 파일에 영향을 미치는 변수를 변경할 수있는 방식으로 python/ruby ​​스크립트의 동작을 제어하려면 어떻게해야합니까?

+1

실제로 C 프리 프로세서를 사용하지 않는 이유는 무엇입니까? Javascript 소스에서 조건부 컴파일을 원했을 때 동료가 한 일입니다. –

+0

코드를 실제로 사전 처리 하시겠습니까? 나는. 이 행들은 성능에 영향을 미칠 수 있으므로 어떤 경우에는 제거하기를 원하거나 단순히 프로그램 매개 변수를 사용하여 프로그램 동작에 영향을 미치기 쉽습니다. 왜냐하면 후자의 경우라면, 아마도 optparse 등을 사용하여 코드 자체에 로직을 구현하는 것이 중요하기 때문입니다. –

답변

2

거의 실제 C 전 처리기를 사용할 수 있습니다. 파일의 이름을 .c으로 끝내려면 gcc -w -E input/file.py.c -o output/file.py을 입력하면됩니다.

주요 문제는 의견과 관련이있는 것으로 보입니다. 전처리 기는 유효하지 않은 전 처리기 지시문 인 파이썬 주석 행에 대해 불평 할 것입니다. C++ 주석 (// comment)을 사용하여이 문제를 해결할 수 있습니다.

또는 더 좋은 아이디어는 간단한 사전 처리기를 작성하는 것입니다. #define 기능 만 필요할 경우 검색을 수행하고 파일을 바꾸는 것에 대해 이야기하는 것입니다.

또 다른 해결책이 같은 것입니다 :

def nothing(*args): 
    pass 

def print_debug(msg): 
    print msg 

if not DEBUG: 
    print_debug = nothing 

디버그 모드에서하지 않으면 인쇄 문이 아무것도하지 않는 방법입니다.

5

일반적으로이 사용 사례에서는 python logging 기능을 사용합니다. 이는 구성 파일에 구성되며 출력 레벨을 설정할 수 있습니다. Java log4j에 익숙하다면 Java log4j와 매우 비슷합니다.

2

사용 pypreprocessor

최신 버전은 또한 PYPI

를 통해 액세스 할 수있는 것은 여기에 기본적인 사용법이다 :이

from pypreprocessor import pypreprocessor 

pypreprocessor.parse() 

#define debug 

#ifdef debug 
print('The source is in debug mode') 
#else 
print('The source is not in debug mode') 
#endif 

당신은 간다. 파이썬에서 구현 된 C 스타일 전처리 조건부 컴파일.

SideNote :이 모듈은 python2x 및 python3k와 호환됩니다.

면책 조항 : 저는 pypreprocessor의 저자입니다.

관련 문제