2016-10-15 12 views
1

VK에 대한 개인용 온라인 파이썬 인터프리터를 쓰고 있는데, IDLE 콘솔을 밀접하게 시뮬레이트합니다. 나만이 허용 목록에있는 일부 사용자 만 내 서버에 해를 끼칠 수있는 안전하지 않은 코드가 아닌이 기능을 사용할 수 있습니다. 그러나 나는 약간의 문제가있다. 예를 들어 코드 def foo():으로 문자열을 보내면 SyntaxError을 얻고 싶지 않지만 긴 문자열을 작성하지 않고 줄 단위로 함수를 정의하는 작업을 계속 수행하려면 \n을 사용하십시오. exec()eval()은이 경우 저에게 적합하지 않습니다. 원하는 효과를 얻으려면 무엇을 사용해야합니까? 죄송합니다 중복, 여전히 그나마 비슷한 질문에서 얻을.파이썬 대화 형 모드 시뮬레이션

답변

2

파이썬 표준 라이브러리는이를 돕기 위해 codecodeop 모듈을 제공합니다. 또한 더 자세한 제어 및 작동 방식의 사용자 정의에 대한 몇 가지 기능을 제공

import code 
code.interact() 

다음 code 모듈 곧장 업 표준 대화 형 인터프리터를 시뮬레이션합니다.

import codeop 
compiler = codeop.CommandCompiler() 

try: 
    codeobject = compiler(some_source_string) 
    # codeobject is an exec-utable code object if some_source_string was a 
    # complete command, or None if the command is incomplete. 
except (SyntaxError, OverflowError, ValueError): 
    # If some_source_string is invalid, we end up here. 
    # OverflowError and ValueError can occur in some cases involving invalid literals. 
:

더 많은 기본 구성 요소에서 사물을 구축하려는 경우는 codeop 모듈은 __future__ 문을 기억하고 불완전한 명령을 인식하는 명령 컴파일러를 제공합니다