VK에 대한 개인용 온라인 파이썬 인터프리터를 쓰고 있는데, IDLE 콘솔을 밀접하게 시뮬레이트합니다. 나만이 허용 목록에있는 일부 사용자 만 내 서버에 해를 끼칠 수있는 안전하지 않은 코드가 아닌이 기능을 사용할 수 있습니다. 그러나 나는 약간의 문제가있다. 예를 들어 코드 def foo():
으로 문자열을 보내면 SyntaxError
을 얻고 싶지 않지만 긴 문자열을 작성하지 않고 줄 단위로 함수를 정의하는 작업을 계속 수행하려면 \n
을 사용하십시오. exec()
및 eval()
은이 경우 저에게 적합하지 않습니다. 원하는 효과를 얻으려면 무엇을 사용해야합니까? 죄송합니다 중복, 여전히 그나마 비슷한 질문에서 얻을.파이썬 대화 형 모드 시뮬레이션
1
A
답변
2
파이썬 표준 라이브러리는이를 돕기 위해 code
및 codeop
모듈을 제공합니다. 또한 더 자세한 제어 및 작동 방식의 사용자 정의에 대한 몇 가지 기능을 제공
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__
문을 기억하고 불완전한 명령을 인식하는 명령 컴파일러를 제공합니다
2
는 무한 루프에 다음
exec <code> in globals,locals
, 판독 입력 귀결.
IPython.frontend.terminal.console.interactiveshell.TerminalInteractiveSh ell.mainloop()
.
ast.parse()
을 시도하여 inputsplitter.push_accepts_more()
에서 계속 감지가 수행됩니다.
사실, IPython에는 이미 Jupyter Notebook이라는 대화식 웹 콘솔이 있으므로 최선의 방법은 재사용하는 것입니다.