2016-12-28 5 views
3

window resize 이벤트에서 신호 처리기를 사용하여 numpy 인쇄 옵션을 설정하려고합니다. numpy가 들여 오기 전까지는 연결을 원하지 않으며 파이썬 시작시 numpy를 자동으로 가져오고 싶지는 않습니다. 나는 아래의 코드와 거의 일하는있어 :신호 처리기는 파이썬에서는 작동하지만 ipython에서는 작동하지 않습니다.

# example.py 
import wrapt 

@wrapt.when_imported('numpy') 
def post_import_hook(numpy): 
    import signal 
    try: 
     from shutil import get_terminal_size 
    except ImportError: 
     # Python 2 
     from shutil_backports import get_terminal_size 

    def resize_handler(signum=signal.SIGWINCH, frame=None): 
     w, h = get_terminal_size() 
     numpy.set_printoptions(linewidth=w) 
     print('handled window resize {}'.format(w)) 

    resize_handler() 
    signal.signal(signal.SIGWINCH, resize_handler) 

그것은 (python -i example.py으로 테스트 및 터미널 조금 크기를 조정) 바닐라 파이썬 REPL에서 작동합니다. 하지만 동일한 코드가 내 시작 ipython 구성에 추가되었을 때 ipython에서 작동하지 않습니다. 이유를 모르겠습니다.

I (즉 지금까지 시도했다 단지)이 특정 방식에 고정 아니에요, 그래서 구문 더 일반적으로 질문합니다 :

는 어떻게 자동으로 터미널 폭 올바르게 NumPy와 채울 수 있습니다 ipython에서?

예를 들어 print(np.arange(200))을 사용하여 numpy의 줄 바꿈 동작을 확인할 수 있습니다.

+1

[이 ipython 문제] (https://github.com/ipython/ipython/issues/8469)와 관련이 있습니다. –

+0

코드는 IPython 4.2.0, Python 3.5.1에서는 작동하지만 IPython 5.1.0 및 Python 3.5.2에서는 작동하지 않습니다. – Kundor

답변

1

the standard fix for printing large arrays without truncation에 영감을 받아 선폭을 무한대로 설정해 보았습니다. 이것은 REPL과 ipython 모두 잘 동작하는 것, 그래서 나는이 해결 방법 제안 : 당신의 수정 ipython 작동하지 않는 이유

import numpy 
numpy.set_printoptions(linewidth=numpy.inf) 

이 설명하지 않습니다,하지만 경우에 위의 라인은 '아무튼 예기치 않은 무언가로 엉망이되어 버리면 인쇄 크기를 조절할 필요가 없습니다.