Проблема с запуском python / matplotlib в фоновом режиме после завершения сеанса ssh

У меня есть VPN, а затем ssh из дома на мой рабочий сервер и вы хотите запустить скрипт python в фоновом режиме, а затем выйти из сеанса ssh. Мой скрипт делает несколько графиков графики, используя matplotlib, и пока я держу соединение открытым, все нормально, но если я выхожу из системы, я продолжаю получать сообщение об ошибке в файле журнала, который я создал для скрипта.

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" 

Я предполагаю, что он не знает, где создавать цифры, которые я хочу, так как я закрываю сессию ssh s X11. Если я вошел в систему во время работы скрипта, я не вижу никаких фигур (хотя это связано с тем, что в моем сценарии нет команды show ()), и я думал, что python использует tkinter для отображения цифр. То, как я создаю фигуры,

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

Для сценария требуется некоторый начальный ввод, поэтому способ, которым я выполняю его в фоновом режиме,

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

Есть ли способ обойти это, или мне просто нужно остаться ssh'd в моей машине?

Благодарю.

  • Как запустить функцию на фоне tkinter
  • Python tkinter создает кнопки для аргументов командной строки для прохождения цикла
  • Python / Tkinter: мышь перетаскивает окно без границ, например. overridedirect (1)
  • Получение меток tkinter для обновления при изменении переменных
  • python ImageTk.PhotoImage - segfault
  • Как создать дочернее окно и установить связь с родителем в TkInter
  • Пользовательский кадр Tkinter не работает
  • Нельзя использовать пакет менеджера геометрии внутри
  • 4 Solutions collect form web for “Проблема с запуском python / matplotlib в фоновом режиме после завершения сеанса ssh”

    Похоже, вы работаете в интерактивном режиме по умолчанию, поэтому matplotlib хочет сначала отобразить все на экране, что, конечно, не может.

    Попробуйте положить

     ioff() 

    в верхней части вашего скрипта, а также для изменения бэкэнд.

    ссылка: http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.ioff

    Я считаю, что ваш бэкэнд matplotlib требует X11. Посмотрите в файле matplotlibrc, чтобы определить, каково ваше значение по умолчанию (из-за ошибки, я делаю ставку TkAgg). Чтобы запустить без X11, используйте сервер Agg. Либо установите его в глобальном масштабе в файле matplotlibrc, либо в скрипте по сценарию, добавив его в программу python:

     import matplotlib matplotlib.use('Agg') 

    Извините, если это глупый ответ, но если вы просто запускаете консольный сеанс, «экрана» недостаточно? Съемные сеансы и т. Д.

    Если вы работаете на ОС * nix, проблема заключается в том, что ваш сеанс завершен, и все процессы, требующие сеанса, также завершаются при отключении. Более конкретно, все ваши процессы отправляются SIGHUP (отключение сигнала). Обработка по умолчанию SITHUP – это прекращение процесса. Если вы хотите, чтобы сценарий продолжался, он должен игнорировать сигнал. Самый простой способ сделать это, предполагая, что вы запускаете свой скрипт через командную строку, чтобы запустить его с помощью команды nohup:

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

    nohup обычно отправляет стандартную и стандартную ошибку в файл nohup.out в текущем каталоге. Поскольку вы перенаправляете уже выходной, nohup.out не будет создан.

    Python - лучший язык программирования в мире.