2016-12-28 26 views
3

window resizeイベントでシグナルハンドラを使用してnumpyの印刷オプションを設定しようとしています。 numpyがインポートされるまで接続したくないので、pythonの起動時にnumpyを自動的にインポートしたくありません。それは、バニラのpython REPL(python -i example.pyと端末を少しサイズを変更してテスト)で動作しますシグナルハンドラはpythonでは動作しますが、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) 

:私はそれを次のコードではほとんど加工持っています。しかし、同じコードが私の起動ipython設定に追加されたときにはipythonで動作しません。理由はわかりません。

私は(それは私がこれまで試したどのようなだけだ)、この特定のアプローチに固定されていないので、私は、フレーズ、より一般的に質問されます:

はどのように自動的にターミナルの幅に正しく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の両方で正常に動作しているようだので、私はこの回避策をお勧め:

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

あなたの修正はipythonのために動作しない理由は説明しませんが、場合には、上記の行は、」doesnの予期せぬことで何かを混乱させるならば、印刷はサイズ変更の影響を受けません。

関連する問題