信号处理程序在python中工作,但在ipython中不工作

信号处理程序在python中工作,但在ipython中不工作,python,numpy,ipython,window-resize,Python,Numpy,Ipython,Window Resize,我正在尝试使用窗口调整大小事件上的信号处理程序设置numpy打印选项。不希望在导入numpy之前建立连接,也不希望在python启动时自动导入numpy。我几乎可以使用下面的代码: # example.py import wrapt @wrapt.when_imported('numpy') def post_import_hook(numpy): import signal try: from shutil import get_terminal_size

我正在尝试使用窗口调整大小事件上的信号处理程序设置numpy打印选项。不希望在导入numpy之前建立连接,也不希望在python启动时自动导入numpy。我几乎可以使用下面的代码:

# 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)
它在vanilla python REPL中工作(使用
python-i example.py测试并稍微调整终端的大小)。但是当相同的代码添加到我的启动ipython配置中时,它在
ipython
中不起作用,我不明白为什么

我对这种特殊的方法没有定论(这正是我迄今为止所尝试的),因此我将更笼统地回答这个问题:

numpy如何在ipython中自动正确填充到终端宽度?

例如,可以使用
print(np.arange(200))
检查numpy的换行行为

受其启发,我尝试将线宽设置为无穷大。这在REPL和ipython中似乎都很好,因此我建议采用以下解决方法:

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

这并不能解释为什么您的修复程序不适用于ipython,但如果上面这一行没有出现任何意外情况,它应该可以使打印不受大小调整的影响。

似乎是相关的。您的代码适用于ipython 4.2.0,适用于Python 3.5.1,但不适用于ipython 5.1.0和Python 3.5.2。