IPython의 포함 된 포격 기능을 사용하는 스크립트에서 작업 중이며 요구 사항으로 stdin/stdout의 모든 데이터를 파일에 기록해야합니다 . 이런 이유로 나는 그들을 위해 래퍼를 쓰기로 결정했다; 나는 래퍼가 어떻게 든를 인식 IPython을 방지 같은데요stdin/stdout을 래핑하면 IPython이 자동 완성 및 기록 기능을 잃게됩니다.
In [1]: ^[[A^[[B^[[A^[[C...
: 그러나, 스트림을 전환 한 후 내 임베디드 IPython 쉘 내가 화살표 버튼을 누를 때 이런 식으로 뭔가를 출력의 자동 완성과 역사 기능을 상실 UP, DOWN, LEFT 및 RIGHT 화살표 (ESC[#A
, ESC[#B
, ESC[#C
, ESC[#D
)에 사용되는 ANSI 이스케이프 시퀀스입니다. 이것이 해결 될 수있는 방법에
import sys
from time import strftime
import IPython
# Custom IO class for file logging
class StdinLogger (object):
def __init__(self, wrapped, file):
# double-underscore everything to prevent clashes with names of
# attributes on the wrapped stream object.
self.__wrapped = wrapped
self.__file = file
def __getattr__(self, name):
return getattr(self.__wrapped, name)
def readline(self):
str = self.__wrapped.readline()
self.__file.write(str)
self.__file.flush()
return str
# Custom IO class for file logging
class StdoutLogger (object):
def __init__(self, wrapped, file):
# double-underscore everything to prevent clashes with names of
# attributes on the wrapped stream object.
self.__wrapped = wrapped
self.__file = file
def __getattr__(self, item):
return getattr(self.__wrapped, item)
def write(self, str):
self.__file.write(str)
self.__file.flush()
self.__wrapped.write(str)
self.__wrapped.flush()
f = open("LOG-" + strftime("%Y-%m-%d-%H-%M-%S") + ".txt", 'w')
# Initialize the file logger
sys.stdin = StdinLogger(sys.stdin, f)
sys.stdout = StdoutLogger(sys.stdout, f)
# Embed IPython shell
IPython.embed(banner1="", banner2="")
어떤 아이디어 : 여기
내 문제를 보여주는 코드입니다?미리 감사드립니다.
Carreau의 (IPython 핵심 개발자) @