问题环境:
- 我个人使用windows系统,通过ssh连接远程linux服务器进行训练,但远程服务器中并未安装GUI,因此使用Python中matplotlib等工具画图时图像并未显示。
- 经过网上其他教程使用'Agg'调整mobaxterm可显示后,vscode终端还是无法显示。
- 目的为使下方代码通过ssh在linux下远程运行,在本地能显示图像:
import matplotlib.pyplot as plt
fig = plt.figure()
plt.plot(range(10))
plt.show()
解决方法:
通过网络其他教程得到,将matplotlib的backend替换为'Tkagg',如下:
import matplotlib
matplotlib.use('tkagg') # Must be before importing matplotlib.pyplot or pylab!
import matplotlib.pyplot as plt
fig = plt.figure()
plt.plot(range(10))
plt.show()
- 在Vscode远程终端运行:程序报错‘Cannot load backend 'TkAgg' which requires the 'tk' interactive framework, as 'headless' is currently running’,图像未显示。将backend切换为'Agg'后尝试,图像亦不显示,但也不报错。
- 在Mobaxterm运行:成功显示出图像,无报错。
按理来说,vscode和mobaxterm运行方式都是一模一样的终端,一个可以理应通用。于是我想到,是不是程序图像已经可以正常输出了,只是vscode找不到输出的地方,毕竟远程服务器是没有图形界面的。因此我调用查看命令:
echo $DISPLAY
在mobaxterm中显示如下:
在Vscode终端显示为空。据此推断,vscode确实是因为找不到输出位置所造成,因此我把vscode输出参数和mobaxterm改成一样的:
export DISPLAY=:10.0
这下两边保持一致了。
重新在vscode运行,成功显示!
扫描二维码关注公众号,回复:
16770898 查看本文章