Jam*_*mie 25 python ssh background tkinter matplotlib
我必须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"
Run Code Online (Sandbox Code Playgroud)
我假设它不知道在哪里创建我想要的数字,因为我关闭了我的X11 ssh会话.如果我在脚本运行时登录,我没有看到任何数字弹出(虽然那是因为我的脚本中没有show()命令),我认为python使用tkinter来显示数字.我创建数字的方式是,
loglog()
hist(list,x)
ylabel('y')
xlabel('x')
savefig('%s_hist.ps' %source.name)
close()
Run Code Online (Sandbox Code Playgroud)
该脚本需要一些初始输入,所以我在后台运行它的方式是
python scriptToRun.py << start>& logfile.log&
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题,或者我是否只需要继续使用ssh进入我的机器?
谢谢.
Mar*_*ark 23
我相信你的matplotlib后端需要X11.查看你的matplotlibrc文件以确定你的默认值(从错误中,我打赌TkAgg).要在没有X11的情况下运行,请使用Agg后端.通过将其添加到python程序,可以在matplotlibrc文件中全局设置它,也可以通过脚本在脚本中设置它:
import matplotlib
matplotlib.use('Agg')
Run Code Online (Sandbox Code Playgroud)
Vic*_*ler 11
看起来你默认以交互模式运行,所以matplotlib想先将所有内容绘制到屏幕上,当然这是不可能做到的.
试试看
ioff()
Run Code Online (Sandbox Code Playgroud)
在脚本的顶部,以及后端更改.
参考:http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.ioff
归档时间: |
|
查看次数: |
17146 次 |
最近记录: |