xlabel with pyplot outside found example python ssh background matplotlib tkinter

python - with - set xlabel matplotlib



Problema al ejecutar python/matplotlib en el fondo después de finalizar la sesión de ssh (4)

Creo que tu backend matplotlib requiere X11. Busque en su archivo matplotlibrc para determinar cuál es su valor predeterminado (del error, estoy apostando TkAgg). Para ejecutar sin X11, use el backend Agg. O configúrelo globalmente en el archivo matplotlibrc o en un script por script agregando esto al programa python:

import matplotlib matplotlib.use(''Agg'')

Tengo que VPN y luego ssh desde mi casa a mi servidor de trabajo y quiero ejecutar una secuencia de comandos python en segundo plano, luego desconectarme de la sesión ssh. Mi script hace varios gráficos de histograma usando matplotlib, y mientras mantengo la conexión abierta, todo está bien, pero si cierro la sesión sigo recibiendo un mensaje de error en el archivo de registro que creé para el script.

File "/Home/eud/jmcohen/.local/lib/python2.5/site-packages/matplotlib/pyplot.py", line 2058, in loglog ax = gca() File "/Home/eud/jmcohen/.local/lib/python2.5/site-packages/matplotlib/pyplot.py", line 582, in gca ax = gcf().gca(**kwargs) File "/Home/eud/jmcohen/.local/lib/python2.5/site-packages/matplotlib/pyplot.py", line 276, in gcf return figure() File "/Home/eud/jmcohen/.local/lib/python2.5/site-packages/matplotlib/pyplot.py", line 254, in figure **kwargs) File "/Home/eud/jmcohen/.local/lib/python2.5/site-packages/matplotlib/backends/backend_tkagg.py", line 90, in new_figure_manager window = Tk.Tk() File "/Home/eud/jmcohen/.local/lib/python2.5/lib-tk/Tkinter.py", line 1647, in __init__ self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use) _tkinter.TclError: couldn''t connect to display "localhost:10.0"

Supongo que no sabe dónde crear las cifras que quiero ya que cierro mi sesión X11 ssh. Si estoy conectado mientras el script se está ejecutando, no veo ninguna figura emergente (aunque eso se debe a que no tengo el comando show () en mi script), y pensé que python usa tkinter para mostrar las cifras. La forma en que estoy creando las figuras es

loglog() hist(list,x) ylabel(''y'') xlabel(''x'') savefig(''%s_hist.ps'' %source.name) close()

El script requiere una entrada inicial, por lo que la forma en que lo estoy ejecutando en segundo plano es

python scriptToRun.py << start>& logfile.log&

¿Hay alguna forma de evitar esto, o simplemente tengo que permanecer ssh''d en mi máquina?

Gracias.


Disculpe si esta es una respuesta estúpida, pero si solo está ejecutando una sesión de consola, ¿la pantalla no sería suficiente? Sesiones desmontables, etc.



Si está ejecutando un sistema operativo * nix, el problema es que su sesión finaliza y todos los procesos que requieren una sesión también finalizan cuando se desconecta. Más específicamente, todos sus procesos reciben un SIGHUP (interrupción de la señal). El manejo predeterminado de SITHUP es terminar el proceso. Si desea que su script continúe, debe ignorar la señal. La forma más fácil de hacerlo es asumiendo que comienzas tu script a través de la línea de comando para ejecutarlo usando el comando nohup:

nohup python scriptToRun.py << start>& logfile.log&

nohup normalmente envía un error estándar y un error estándar al archivo nohup.out en el directorio actual. Como ya está redireccionando, no se creará ninguna salida nohup.out.