Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当从“public_html”运行CGI时,当它与python CGI服务器一起工作时,为什么会出现500错误?_Python_Cgi - Fatal编程技术网

当从“public_html”运行CGI时,当它与python CGI服务器一起工作时,为什么会出现500错误?

当从“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 -

摘要:Python cgi脚本在从简单Python调试服务器调用时按预期运行,但在从
~/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