Windows 10

时间:2018-06-03 11:31:30

标签: python apache windows-10

刚刚将PC升级到Windows 10时,在Apache下运行Python脚本作为cgi时出现了一个奇怪的间歇性错误。特定脚本通过调用help("modules")显示可用Python模块的列表。有时脚本执行正常,但有时它会失败。当它失败时,浏览器显示"内部服务器错误"并且Apache错误错误日志具有相对无法提供信息的错误消息"在标题之前输出脚本结束"。

实验表明,每20次尝试中出现错误大约5次。

奇怪的是,当同一台PC使用Windows 7时,脚本总是运行正常,并且当在Ubuntu服务器上运行时,相同的脚本执行正常(在Apache下为cgi)。当直接作为Python脚本(没有cgi / Apache)运行时,即使在Windows 10下也能正常运行。只有Windows 10 Apache才能看到这个问题。

名为testX.py的完整脚本是:

#!/usr/bin/python
# Note the path to Python may vary
#  
print "Content-type: text/html\n"
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">";
print "<HTML>"
print "<HEAD>"
print "<TITLE>Python Test</TITLE>"
print "</HEAD>"
print "<H1>Python Test Script - Available Modules</H1>"
print "<P><PRE>"
help("modules")
print "</PRE></P>"
print "</HTML>"

技术说明:

  • 脚本保存在通过Apache提供的cgi-bin目录中,并使用指向mydomain.com/cgi-bin/testX.py的浏览器进行查看
  • Python的路径与Windows无关,因为Apache获得了指令ScriptInterpreterSource Registry
  • 如果从脚本中删除了行help("modules"),它总是执行正常
  • 从Python命令行调用help("modules")也可以正常工作
  • Apache版本2.4.33(32位)
  • Python版本2.7.14
  • Windows 10 Pro(10.0.17134.81)

将问题隔离到help("modules")和Windows 10的组合需要一段时间,但是有谁知道为什么这是一个问题或为什么它是断断续续的?

更新

前几年有人谈到help("modules")可能导致分段错误,这与此处看到的行为一致。见Using help and pydoc to list python modules not working

我已使用一个简单的函数替换了对help("modules")的可疑调用,该函数使用pkgutil输出HTML表格:

def help_modules():
    from pkgutil import iter_modules
    mod_list = []
    for thismod in iter_modules():
        mod_list.append(thismod[1])
    mod_list.sort()
    nummods = len(mod_list)
    numcols = 6
    numblanks = (-nummods) % numcols
    mod_list.extend([''] * numblanks)
    numrows = len(mod_list) / numcols
    print "<TABLE style='width:100%; table-layout: fixed;'>"
    for i in range(0,numrows):
         print "<TR>"
         for j in range(0,numcols):
             print "<TD>%s" % (mod_list[i+j*numrows])
         print "</TR>"
    print "</TABLE>"    
    return

现在一切似乎都很好。

0 个答案:

没有答案