2013-10-11 2 views
27

Я пытаюсь запустить очень простой код, который выводит .png-файл в кластере. Вот код:

import matplotlib.pyplot as plt 
import numpy as np 

x = np.random.randn(60) 
y = np.random.randn(60) 

plt.scatter(x, y, s=20) 

out_png = 'path/to/store/out_file.png' 
plt.savefig(out_png, dpi=150) 

Если я запускаю этот код с помощью команды python simple_code.py в моей системе, которая Matplotlib 1.2.1 установлен я получаю предупреждение:

Unable to load library icui18n "Cannot load library icui18n: 

.png изображение по-прежнему производится так У меня здесь нет проблем. Но если я использую ту же команду и код в кластере, который Matplotlib 1.3.0 установлен, он терпит неудачу с ошибкой:

Traceback (most recent call last): 
    File "simple_code.py", line 33, in <module> 
    plt.scatter(x, y, s=20) 
    File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 3078, in scatter 
    ax = gca() 
    File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 803, in gca 
    ax = gcf().gca(**kwargs) 
    File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 450, in gcf 
    return figure() 
    File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 423, in figure 
    **kwargs) 
    File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 79, in new_figure_manager 
    return new_figure_manager_given_figure(num, figure) 
    File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 87, in new_figure_manager_given_figure 
    window = Tk.Tk() 
    File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1712, in __init__ 
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use) 
_tkinter.TclError: no display name and no $DISPLAY environment variable 

Что здесь происходит?


Добавить это сценарий я использую для входа в кластер:

#!/usr/bin/expect 

set login "user" 
set addr "address1" 
set addr2 "address2" 
set pw "password" 

spawn ssh -X [email protected]$addr 
expect "[email protected]$addr\'s password:" 
send "$pw\r" 
expect "[email protected]:" 
send "ssh -X $addr2\r" 
expect "[email protected]$addr\'s password:" 
send "$pw\r" 
interact 
+2

Вы используете это через 'ssh'? – SethMMorton

+1

Да, я СетМортон. Я задал задание и разрешил ему работать в кластере через 'ssh'. – Gabriel

+3

Когда вы вызываете 'ssh', вы используете флаг' -X'? – SethMMorton

ответ

33

Ваша проблема в команде SSH. Что вам нужно сделать, так это написать так:

ssh -X "your_login" 
+12

Как FYI, это не было решением проблемы OP. Я предложил в своем собственном ответе, а затем удалил его, когда ОП сказал мне, что это не устраняет проблему. Проблема, идентичная заданной здесь, а также содержит решение: http://stackoverflow.com/q/2801882/1399279. – SethMMorton

+0

Напомним, что 'ssh -X' может иногда давать вам предупреждения типа« Предупреждение: неудачная настройка переадресации X11 не удалась: данные ключа xauth не сгенерированы », в этом случае вы должны сделать' ssh -Y' вместо этого. –

Смежные вопросы