【问题标题】:CherryPy, load image from matplotlib, or in generalCherryPy,从 matplotlib 或一般情况下加载图像
【发布时间】:2010-12-08 21:18:40
【问题描述】:

我不确定我做错了什么,如果您能指出我要阅读的内容,那就太好了。我在第一个 CherryPy 教程“hello world”中添加了一点 matplotlib 情节。 问题1:我怎么知道文件将保存在哪里?它恰好是我运行文件的地方。 问题 2:我似乎无法在浏览器中打开/查看图像。当我在浏览器中查看源代码时,一切看起来都是正确的,但没有运气,即使我包含了完整的图像路径。 我认为我的问题在于路径,但不确定发生的机制

感谢您的帮助 文森特

import cherrypy
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

class HelloWorld:

    def index(self):
        fig = plt.figure()
         ax = fig.add_subplot(111)
         ax.plot([1,2,3])
         fig.savefig('test.png')
        return ''' <img src="test.png" width="640" height="480" border="0" /> '''

    index.exposed = True

import os.path
tutconf = os.path.join(os.path.dirname(__file__), 'tutorial.conf')

if __name__ == '__main__':
    cherrypy.quickstart(HelloWorld(), config=tutconf)
else:
    cherrypy.tree.mount(HelloWorld(), config=tutconf)

【问题讨论】:

    标签: python matplotlib cherrypy


    【解决方案1】:

    以下是一些对我有用的东西,但在您继续之前,我建议您阅读this page,了解如何配置包含静态内容的目录。

    问题 1:我如何知道文件将保存在哪里?
    如果您指定文件的保存位置,查找文件的过程应该会变得更容易。
    例如,您可以将图像文件保存到 CherryPy 应用程序目录中名为“img”的子目录中,如下所示:

    fig.savefig('img/test.png') # note:  *no* forward slash before "img"
    

    然后显示如下:

    return '<img src="/img/test.png" />' # note:  forward slash before "img"
    

    问题 2:我似乎无法 [能够] 在浏览器中打开/查看图像。
    这是我用来为 CherryPy 应用程序提供静态图像的一种方法:

    if __name__ == '__main__':
        import os.path
        currdir = os.path.dirname(os.path.abspath(__file__))
        conf = {'/css/style.css':{'tools.staticfile.on':True,
            'tools.staticfile.filename':os.path.join(currdir,'css','style.css')},
            '/img':{'tools.staticdir.on':True,
            'tools.staticdir.dir':os.path.join(currdir,'img')}}
        cherrypy.quickstart(root, "/", config=conf)
    

    【讨论】:

    • 那么“CherryPy 应用程序目录”是如何确定的呢?我原以为这是运行 myapp.py 文件的地方。我还没有阅读您推荐的静态文件信息。现在就这样做。谢谢
    • CherryPy 应用程序目录位于您的 myapp.py 文件所在的任何位置,您是正确的。在我的示例中,“img”子目录与 myapp.py 文件位于同一目录中。
    • 我正在通过“python /Users/vmd/Downloads/CherryPy-2.3.0/cherrypy/tutorial/tut01_helloworld1.py”运行myapp.py,但没有成功。当您在“cd /Users/vmd/Downloads/CherryPy-2.3.0/cherrypy/tutorial”然后“python tut01_helloworld1.py”之后运行 myapp.py 时,文件似乎保存在您所在的目录中,再次感谢文森特
    • Vincent,这就是为什么在 Web 应用程序中与文件系统交互时最好始终使用绝对路径的原因——如果它们是相对的,那么在各种启动场景(如 /etc /init.d 脚本,例如)。像亚当一样使用abspath__file__,你会更快乐。 :)
    • 感谢您的最佳回答@bernie
    猜你喜欢
    • 2015-02-24
    • 2015-09-17
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 2015-11-29
    • 2021-10-27
    相关资源
    最近更新 更多