python - tkinter.TclError : couldn't connect to display "localhost:18.0"

标签 python ssh matplotlib subprocess

我试图在中央服务器中运行模拟(用 python 编写),模拟完成后,通过连接到我的本地 PC 将保存的图形文件/保存的数据文件移动到我的本地 PC。代码如下:

import matplotlib.pyplot as plt
import subprocess
import scipy.io
import os

#Save data file:
scipy.io.savemat(data_path + Filename_str, dict(A=board))

#Create / Save figure by using imshow (Heatmap)
p = plt.imshow(mean_map.T, cmap = plt.cm.gist_yarg_r, origin = 'lower',  extent = [0, phi, 0, Z], aspect='auto')
plt.savefig(figure_path + Filename_str + '-Homophily.pdf')

# Connect to my local host (arabian-knights) using ssh, and follow command.
ret = subprocess.call(['ssh', 'arabian-knights', 'mv Data/* /scratch/Data/'])
ret = subprocess.call(['ssh', 'arabian-knights', 'mv Figure/* /scratch/Figure/'])

从我的本地计算机(阿拉伯骑士)连接到服务器计算机后,我在服务器计算机的后台运行此模拟。即使我关闭了与服务器计算机的连接,因为模拟在后台运行,它不会停止,并且在模拟完成后数据文件会正确移动到我的本地计算机。但是,图形文件(由 matplotlib.pyplot.imshow 生成)没有保存,显示以下错误消息:

Traceback (most recent call last):
  File "./ThrHomoHeatmap-thrstep.py", line 179, in <module>
    p = plt.imshow(board.T, cmap = plt.cm.gist_yarg_r, vmin=0, vmax=n, origin = 'lower',  extent = [0, phi, 0, Z], aspect='auto')
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 2370, in imshow
    ax = gca()
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 701, in gca
    ax =  gcf().gca(**kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 369, in gcf
    return figure()
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 343, in figure
    **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 80, in new_figure_manager
    window = Tk.Tk()
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1688, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: couldn't connect to display "localhost:18.0"

有没有人可以解决这个问题,将matplotlib.pyplot图形文件也从服务器移动到本地计算机?

最佳答案

问题是您正在使用一个交互式后端,它试图为您创建图形窗口,但由于您断开了启动模拟时可用的 x-server 的连接而失败。

将您的导入更改为

import matplotlib
matplotlib.use('pdf')
import matplotlib.pyplot as plt

关于python - tkinter.TclError : couldn't connect to display "localhost:18.0",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19518352/

相关文章:

git - 为什么 cap deploy 给出 Permission denied (publickey)?

go - 我如何在 goloang ssh session 中捕获交错的 stdout 和 stderr?

python - 左侧 1 个 x 轴、1 个 y 轴、右侧 1 个 y 轴

python - 在墨卡托投影仪中在 map 上绘制数据看起来纬度翻转了 90 度

python - 使用 django 查询从多个表中检索详细信息

authentication - 修改用于公钥签名的 SSH 代理

python - 如何连接字典中文本的连续单词?

python - Matplotlib - imshow 子图重叠

python - 将行号传递给嵌入式 Python 解释器

python - 覆盖 Django InlineModelAdmin 上的 save_model