2011-01-14 4 views
4

Qt를 사용하는 응용 프로그램 용 대화 형 파이썬 셸에서 작업하고 있습니다. 그러나 리디렉션 할 수있는 대화 형 도움말을 얻을 수 없습니다. 내 파이썬 코드이있다 : 나는 그것이 대화 형의 도움을 리디렉션하지 않습니다()의 도움을 실행 적 Redirect python interactive help()

class OutputCatcher: 
    def __init__(self): 
     self.data = '' 
    def write(self, stuff): 
     self.data += stuff 

sys.stdout = OutputCatcher() 

는하지만, 그냥에서 파이썬 스크립트를 실행 한 콘솔에 그것을 밖으로 덤프 때. 콘솔에서 Ctrl + C를 누르면 내 OutputCatcher 개체로 보냅니다.

Google을 시도했지만 실제로 아무것도 찾을 수 없었습니다.

+0

코드가 실행되는 플랫폼은 무엇입니까? 현재 파이썬 인터프리터에서 콘솔을 실행해야합니까, 아니면 하위 프로세스를 시작할 수 있습니까? –

+0

플랫폼은 Linux, Windows 및 OSX이므로 거의 모든 것이 있습니다. –

+0

제 두 번째 질문은 어떻습니까? 하위 프로세스에서 Python 대화식 인터프리터를 실행하는 것이 가능합니까? 아니면 대화식 인터프리터 내부에서 현재 인터프리터 변수에 액세스해야합니까? –

답변

1

원본을 읽는 것만으로 도움이 무엇인지 추측 할 필요가 없습니다.

내장 된 help은 site.py에서 생성되며, _Helper의 인스턴스입니다. 호출되면 단순히 호출을 pydoc.help(...)에 위임하여 pydoc.py에있는 소스를 위임합니다.

class _Helper(object): 
    """Define the built-in 'help'. 
    This is a wrapper around pydoc.help (with a twist). 

    """ 

    def __repr__(self): 
     return "Type help() for interactive help, " \ 
       "or help(object) for help about object." 
    def __call__(self, *args, **kwds): 
     import pydoc 
     return pydoc.help(*args, **kwds) 

pydoc.help는 sys.stdin, sys.stdout로 설정 입력/출력 pydoc.Helper의 인스턴스이지만, (그리고 나는 당신이 당신의 문제가있는 곳은 의심)이 시간 때에 표준 출력 표준 입력의 값을/사용 pydoc을 가져 오기 때문에 나중에 다시 바인딩하면 아무 효과가 없습니다.

당신이 필요로하는 어떤 파일이라도 명시 적으로 새로운 pydoc Helper를 생성하는 자신의 _Helper 클래스로 기본 도움말 인스턴스를 대체 할 것을 제안합니다.

1

도움말은 stdout으로 덤프하지 않고 터미널과 상호 작용합니다. 또한 셸 외부에서 사용되도록 의도 된 것이 아니므로 이러한 작업을 보장하기 위해 작성되지는 않습니다.

당신이하려고하는 것은 터미널을 구현하는 것일 뿐이지 만 그다지 중요하지 않은 작업이지만 Qt를위한 기존 터미널 에뮬레이션 라이브러리가있을 수 있습니다. 아마도 파이썬으로 그리고 바인딩과 함께 쓰여졌을 것입니다.

+0

'python -c "help()"'> file'은 나를 위해'file'에 도움을 덤프합니다. 그래서 stdout과 상호 작용하는 것처럼 보입니다. 그것은 단지'sys.stdout'을 사용하지 않지만 당신은이 문제를 해결할 수 있습니다. 나단이 내 질문에 대답하기를 기다리고 있습니다 :) –