当从“public_html”运行CGI时,当它与python CGI服务器一起工作时,为什么会出现500错误?
摘要:Python cgi脚本在从简单Python调试服务器调用时按预期运行,但在从当从“public_html”运行CGI时,当它与python CGI服务器一起工作时,为什么会出现500错误?,python,cgi,Python,Cgi,摘要:Python cgi脚本在从简单Python调试服务器调用时按预期运行,但在从~/public\u html/cgi-bin/运行时失败,脚本头过早结束错误 问题 在运行简单的python Web服务器时,我的CGI脚本工作正常,在导航到nameofmyhost.com:8080/… 但是,当从我的public\u html/cgi-bin目录运行相同的脚本时,会出现500个脚本头过早结束的错误。我能做些什么来解决这个问题 文件的权限似乎正常: drwxrwxrwx cgi-bin -
~/public\u html/cgi-bin/
运行时失败,脚本头过早结束错误
问题
在运行简单的python Web服务器时,我的CGI脚本工作正常,在导航到nameofmyhost.com:8080/…
但是,当从我的public\u html/cgi-bin
目录运行相同的脚本时,会出现500个脚本头过早结束的错误。我能做些什么来解决这个问题
文件的权限似乎正常:
drwxrwxrwx cgi-bin
-rwxr-xr-x cgi-bin/generate_list.py
这是simple_httpd.py,一个简单的python Web服务器
from http.server import HTTPServer, CGIHTTPRequestHandler
port = 8080
httpd = HTTPServer(('', port), CGIHTTPRequestHandler)
print("Starting simple_httpd on port: " + str(httpd.server_port))
httpd.serve_forever()
CGI脚本生成_list.py:
#! /usr/local/bin/python3
import athletemodel
import yate
import glob
data_files = glob.glob("data/*.txt")
athletes = athletemodel.put_to_store(data_files)
print(yate.start_response())
print(yate.include_header("Coach Kelly's List of Athletes"))
print(yate.start_form("generate_timing_data.py"))
print(yate.para("Select an athlete from the list to work with:"))
for each_athlete in athletes:
print(yate.radio_button("which_athlete", athletes[each_athlete].name))
print (yate.end_form("Select"))
print(yate.include_footer({"Home": "/index.html"}))
我猜我需要明确地把我的目录写在某个地方,也许
PS:我正在阅读Oreilly的第一本Python书籍
调试步骤
检查服务器是否可以找到我的文件
服务器在公共主页中找到简单html文件[确定]
检查CGI脚本是否可以无错误地执行
Content-type: text/html
<html>
<head>
<title>Coach Kelly's List of Athletes</title>
[...]
问题是学校Web服务器的基础与simple\u httpd.py
服务器的基础不同。这意味着您必须提供数据目录的绝对路径,而不是相对路径
更改以下行:
- data_files = glob.glob("data/*.txt")
+ data_files = glob.glob("/home/<username>/public_html/data/*.txt")
-data\u files=glob.glob(“data/*.txt”)
+data\u files=glob.glob(“/home//public\u html/data/*.txt”)
如果我正确理解了您的问题,现在应该可以按预期进行操作了
[编辑]:检查cgi bin脚本是否工作的一种快速方法是从命令行运行它们。登录学校服务器并尝试使用cgi脚本:
$ cd /home/<username>/public_html/
$ python3 my_cgi_script.py
$cd/home//public\u html/
$python3 my\u cgi\u script.py
这应该打印出您期望的html或堆栈跟踪。您需要在此处提供实际代码。该问题包含的信息远远不够回答-1为清晰起见,请编辑并提供相关代码。我添加了代码,并试图在最后解释更多内容。如果我能回答任何其他问题,请告诉我。这将使调试FunBeans变得更容易。删除了我的否决票。我来看看。谢谢!我更改了路径,然后从命令行检查了脚本,它有一些错误,但这是因为我必须在另一个文件中调整路径,我这样做了,然后它最终打印出HTML页面。但我仍然得到了500的误差。FunBeans:我不认为第18行是问题所在。您可以将其删除以进行检查。你会从你的cgi脚本中拿出前四行输出吗?您是否也会为您的webapp
文件夹运行ls-lR
?这可能是cgi bin和脚本之间奇怪的所有权不匹配。您还可以尝试一个非常简单的脚本来测试cgi基础结构是否按预期工作<代码>打印(“内容类型:text/html\n\nHello\n”)
在一个python脚本中,当从网页调用运动员列表时,应在与运动员列表相同的位置成功执行。内容类型:text/html
凯利教练的运动员列表
我将权限放在问题的最后。我还制作了一个小测试脚本,将其保存为test.py,并将其放在index.html中,它给出了相同的500错误。
- data_files = glob.glob("data/*.txt")
+ data_files = glob.glob("/home/<username>/public_html/data/*.txt")
$ cd /home/<username>/public_html/
$ python3 my_cgi_script.py