Я бы хотел совместить интерактивное построение графиков в Matplotlib и интерфейс командной строки Cmd в python. Как я могу это сделать?
Могу ли я использовать потоки? Я попробовал следующее:
from cmd import Cmd
import matplotlib.pylab as plt
from threading import Thread
class MyCmd(Cmd):
def __init__(self):
Cmd.__init__(self)
self.fig = plt.figure()
self.ax = self.fig.add_subplot(1,1,1)
def do_foo(self, arg):
self.ax.plot(range(10))
self.fig.canvas.draw()
if __name__=='__main__':
c = MyCmd()
Thread(target=c.cmdloop).start()
plt.show()
Он открывает окно рисунка, и я могу набирать в консоли команды, которые фактически выполняются. Когда команда «foo» выполнена, она рисует в окне рисунка. Пока все в порядке. Однако при повторном входе в консоль консоль зависла, и теперь появилось новое окно команд. Но когда я щелкаю в окне рисунка, консоль выводит новую командную строку, и я могу ввести новую команду.
Кажется, что эти две петли на самом деле не чередуются или что-то в этом роде. Есть ли лучший, более распространенный способ?