Я хотел бы объединить интерактивный график в 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", она рисует в окне рисунка. Пока все в порядке. Однако, когда я снова вхожу в консоль, консоль кажется зависшей, и теперь появляется новое командное окно. Но когда я нажимаю на окно рисунка, консоль выводит новую командную строку, и я могу ввести новую команду. Кажется, две петли на самом деле не чередуются или что-то в этом роде. Есть ли лучший, более распространенный способ?