Nik*_*man 5 python windows matplotlib ipython enthought
我正在使用 matplotlib 实时监控一个实验,以在 while 循环中生成绘图。理想情况下,循环应该在类似KeyboardInterrupt. 这在 Ubuntu 测试中运行良好。在 Windows 7 中,使用ipython,它退出并"Terminate batch job (Y/N)?"关闭解释器。我想避免这种行为,并在 KeyboardInterrupt 之后让解释器保持打开状态。这是一个测试脚本。
[编辑 2]:如果ipython加载为ipython --pylab.
import time
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
line, = ax.plot([0], [0], 'b-o')
window = 50
plot_data = np.zeros((window, 2))
i = 0
start = time.time()
while True:
try:
data = [time.time() - start, np.random.rand()]
print ' '.join('{:.2f}'.format(x) for x in data)
if i < window:
plot_data[i,:] = data
line.set_data(plot_data[0:i+1,0], plot_data[0:i+1,1])
else:
plot_data[0:window-1] = plot_data[1:window]
plot_data[window-1] = data
line.set_data(plot_data[:,0], plot_data[:,1])
ax.relim()
ax.autoscale_view(True,True,True)
fig.canvas.draw()
plt.pause(0.1)
i += 1
except KeyboardInterrupt:
print "Program ended by user.\n"
break
print 'Success!'
Run Code Online (Sandbox Code Playgroud)
[编辑 1]:我应该更清楚为什么我用 matplotlib 标记它。下面的示例脚本在任一操作系统中都没有问题地执行。
i = 0
start = time.time()
while True:
try:
data = [time.time() - start, np.random.rand()]
print ' '.join('{:.2f}'.format(x) for x in data)
time.sleep(0.1)
except KeyboardInterrupt:
print "Proram ended by user. \n"
break
print 'Success!'
Run Code Online (Sandbox Code Playgroud)
所有软件包都是昨天安装的,作为Enthought.
我无法重现你的问题。我将您的测试脚本复制到一个文件中,并使用命令ipythonexception.py启动它。然后我得到以下输出。ipythonrun
In [1]: run ipythonexception.py
0.00 0.27
0.31 0.11
0.56 0.44
0.81 0.26
1.06 0.27
1.29 0.66
1.53 0.32
1.76 0.74
2.03 0.44
2.26 0.89
Program ended by user.
Success!
In [2]: window
Out[2]: 50
In [3]:
Run Code Online (Sandbox Code Playgroud)
一切似乎都按其应有的方式进行。我在Windows 7,Python 2.7.2和Ipython 0.13.
您Ipython从批处理文件开始吗?我认为如果我破坏了一些批处理作业,我通常会收到"Terminate batch job (Y/N)?"一条消息。Windows