SSH(-X)连接Ubuntu16.04运行词云脚本遇_tkinter.TclError错误
解决_tkinter.TclError: couldn't connect to display "localhost:10.0"错误
嘿,我来帮你搞定这个烦人的错误!你遇到的问题本质是matplotlib后端设置的顺序不对,另外虽然用了SSH-X转发,但其实咱们根本不需要它——因为Agg是无GUI后端,完全可以离线生成图片,不用依赖X11显示服务。
具体修复方案
1. 调整后端设置的位置(最关键)
mpl.use('Agg')必须在导入matplotlib.pyplot之前执行,否则这个设置根本不会生效!你原来的代码先导入了plt,再设置后端,这就等于白设置了。修改后的代码应该是这样:
from os import path from wordcloud import WordCloud import matplotlib as mpl # 先设置无GUI后端,再导入pyplot! mpl.use('Agg') import matplotlib.pyplot as plt d = path.dirname(__file__) text = open(path.join(d, 'words.txt')).read() wordcloud = WordCloud().generate(text) # 配置图表后直接保存,别想着显示(服务器没GUI啊) plt.imshow(wordcloud, interpolation='bilinear') plt.axis("off") # 把生成的词云存到文件里 plt.savefig(path.join(d, 'wordcloud.png'))
2. 完全可以抛弃SSH的-X参数
既然用了Agg后端,你完全不需要用ssh -X连接服务器,直接普通SSH连接就行:
ssh your_username@your_server_ip
如果非要保留X转发(其实没必要),可以给服务器装一下依赖:
sudo apt-get install xauth python-tk python3-tk
但真心不推荐,因为咱们要的是离线生成图片,不是在服务器上显示窗口。
3. 更简单的方式:直接用WordCloud自带的保存方法
其实你甚至可以跳过matplotlib的绘图步骤,直接用WordCloud的to_file方法生成图片,这样连plt都不用碰:
from os import path from wordcloud import WordCloud d = path.dirname(__file__) text = open(path.join(d, 'words.txt')).read() wordcloud = WordCloud().generate(text) # 直接保存,一步到位 wordcloud.to_file(path.join(d, 'wordcloud_direct.png'))
验证一下
修改完代码后,在服务器上运行脚本,看看是不是成功生成了图片文件,而且再也不会弹出那个display连接错误啦!
内容的提问来源于stack exchange,提问作者W. Reyna
相关产品推荐
相关产品推荐

