如何让CherryPy遵循符号链接?

时间:2014-11-30 20:54:12

标签: python windows symlink cherrypy

我正在尝试运行一个本地服务器(现在)主要服务于Windows 7计算机上的静态内容。问题是许多内容是使用符号链接组织的,当我尝试使用CherryPy提供这些文件时,它们总是返回:

  

请求的资源返回的字节数多于声明的Content-Length。

大概这是因为CherryPy会检查磁盘上符号链接的大小,将其用于Content-Length,然后当它尝试访问该文件时,Windows会为其提供文件的完整大小,因此两者不要不配。我猜这个问题已经解决了,并且有一个我不知道的配置选项,但我似乎无法找到所有CherryPy配置选项的完整列表。任何人都有一个很好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

据我所知,这个问题与CherryPy无关。如果你看过cherrypy.lib.static.serve_file,你会看到以下内容。

try:
    st = os.stat(path)
except OSError:
    if debug:
        cherrypy.log('os.stat(%r) failed' % path, 'TOOLS.STATIC')
    raise cherrypy.NotFound()

# ...

# Set Content-Length and use an iterable (file object)
#   this way CP won't load the whole file in memory
content_length = st.st_size
fileobj = open(path, 'rb')
return _serve_fileobj(fileobj, content_type, content_length, debug=debug)

Python文档说明了os.stat

  

在给定路径上执行等效的stat()系统调用。   (此函数遵循符号链接;使用lstat()统计符号链接。)

Wikipedia points to restrictions创建符号链接,因为只有提升的管理员才能创建它们。所以它看起来不像是一个常见的功能。这些链接的类型也很少,启用它们的方式也可能不同。

无论如何,我很容易检查os.stat是否真的遵循您平台上的符号链接:

import os
print os.stat('/path/to/filename').st_size

如果您认为结果不正确,我建议您向Python bug tracker提交报告。