繁体   English   中英

如何防止ipython在运行脚本时关闭交互模式

[英]How to prevent ipython shutting down interactive mode while running a script

本页讨论了ipython在交互式绘图中的用法: http ://matplotlib.org/users/shell.html

根据该页面,默认情况下,用于在ipython中运行脚本的%run命令关闭交互模式。 是否可以在交互模式下运行脚本?

我希望脚本中的绘图命令在运行时立即在绘图图中生效,就好像它们是从控制台以交互方式输入的一样。

例如,考虑以下非常简单的脚本:

# try.py:
# run in ipython that is started with 
# ipython --pylab
# using 
# %run -i try.py

from numpy import *
from time import sleep

ion()
x = randn(10000)
hist(x,100)
show()
sleep(5)
xlabel('labalu')

如注释所示从ipython运行时,此脚本等待5秒,然后显示所有内容。 我想要的是:如注释中所示从ipython运行时,脚本应立即显示直方图,等待5秒钟,然后更新图形以显示x标签。

移动ion()以便在show()执行我认为想要的操作。 为什么它不在更高的位置,我不知道是副手。

如果将wx用作后端,则可以进行以下工作:

#run in ipython that is started with ipython --pylab=wx
from numpy import *
import matplotlib
matplotlib.use('WX')
import wx
from time import sleep
import numpy as np
import matplotlib.pyplot as plt

plt.ion()
x = np.random.uniform(0,1,100)
plt.plot(x)
plt.show()
wx.Yield()
for i in reversed(range(5)):
    print(i)
    sleep(1)
plt.xlabel('labl')
wx.Yield()

因此, wx.Yield()允许与图形窗口进行交互。 当脚本使用普通的python运行时,这也起作用,但是在脚本末尾自动关闭了图形。

任何跨后端解决方案(或qt / tk的解决方案)仍然很不错。

下面是可与wx和qt后端一起使用的解决方案。 gcf()。canvas.flush_events()可以解决问题。

# try.py:
# run in ipython that is started with 
# ipython --pylab
# using 
# %run -i try.py

from numpy import *
import matplotlib
from time import sleep

x = randn(10000)
hist(x,100)
show()
ion()
gcf().canvas.flush_events() 
sleep(5)
xlabel('labalu')
show()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM