I was trying to use Matplotlib to plot some data, through a call to "open-pipe*" ... I'm trying to slowly rewrite some of my tools in Scheme.
When I run the program from the shell with "python -i plotter.py" I can send it updates ... but when I run it through Guile, it seems to store up all of my updates, then right before the program closes a window pops up for a fraction of a second and then vanishes. Am I using "open-pipe*" incorrectly? #!/usr/bin/guile !# (use-modules (ice-9 popen) (ice-9 readline) (ice-9 textual-ports)) (define program (string-concatenate '("import scipy.special\n" "import matplotlib.pyplot as plt\n" "import numpy as np\n" "x = np.linspace(0, 10)\n" "y0 = scipy.special.jv(0, x)\n" "def update_data():\n" " print('updating')\n" " noise = np.random.randn(y0.size)*0.1\n" " line1.set_ydata(y0 + noise)\n" " plt.pause(0.1)\n" "fig, ax = plt.subplots(1, 2)\n" "ax[0].plot(x, y0)\n" "ax[0].set_title('Original Data')\n" "ax[0].set_xlabel('X')\n" "ax[0].set_ylabel('Y')\n" "ax[1].plot(x, y0)\n" "line1, = ax[1].plot(x, y0, '.')\n" "ax[1].set_title('Noisy Data')\n" "ax[1].set_xlabel('X')\n" "ax[1].set_ylabel('Y')\n" "fig.show()\n" "plt.pause(0.1)\n"))) (define prompt "update? ('quit' to stop')") (define stuff (open-pipe* OPEN_WRITE "python3")) (setvbuf stuff 'none) (put-string stuff program) (force-output stuff) (let loop ([command (readline prompt)]) (unless (string-prefix? "quit" command) (display "updating\n") (put-string stuff "update_data()\n") (loop (readline prompt)))) (close-pipe stuff)