如何不仅从python CGI脚本打开HTML文件,而且将字符串和JSON文件等数据传递到HTML脚本?

如何不仅从python CGI脚本打开HTML文件,而且将字符串和JSON文件等数据传递到HTML脚本?,html,json,python-3.x,cgi,Html,Json,Python 3.x,Cgi,一段时间以来,我一直在试图弄清楚如何在不使用框架的情况下做到这一点(例如,我可以使用Flask实现这一点),但到目前为止我还没有发现任何东西。我有两个html脚本和一个python cgi脚本。本质上,我有第一个html文件,用户在其中输入一个字符串,我将其读入我的python cgi脚本,该脚本又做了很多事情,最终给了我一组字符串和json文件,我需要将这些字符串和json文件传递给另一个html文件,并能够在那里读取它们 到目前为止,前半部分工作正常,我可以通过重定向打开第二个html,重定

一段时间以来,我一直在试图弄清楚如何在不使用框架的情况下做到这一点(例如,我可以使用Flask实现这一点),但到目前为止我还没有发现任何东西。我有两个html脚本和一个python cgi脚本。本质上,我有第一个html文件,用户在其中输入一个字符串,我将其读入我的python cgi脚本,该脚本又做了很多事情,最终给了我一组字符串和json文件,我需要将这些字符串和json文件传递给另一个html文件,并能够在那里读取它们

到目前为止,前半部分工作正常,我可以通过重定向打开第二个html,重定向并不优雅,但以下代码没有任何其他功能:

#!/Users/<username>/opt/anaconda3/bin//python
import pandas as pd
import numpy as np
import cgi
import cgitb
import sys
cgitb.enable()

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
protein_name = form.getvalue('protein_name')
####### function search_results takes in protein_name and gives me the data ###
####### I need to pass to the html file: results.html #########################


if ((search_results(protein_name)!="No protein entered")&(search_results(protein_name)!="No results found")):

    all_vars = search_results(protein_name)
    ##### all_vars is a tuple of strings like gene_name, json files and integers
    print("Content-type: text/html","\n\n")
    print ('''
  <head><meta http-equiv="refresh" content="0;URL='http://localhost/results.html'" /></head>    
''')
#/用户//opt/anaconda3/bin//python
作为pd进口熊猫
将numpy作为np导入
导入cgi
进口cgitb
导入系统
cgib.enable()
#创建FieldStorage的实例
form=cgi.FieldStorage()
#从字段中获取数据
protein\u name=form.getvalue('protein\u name')
#######函数搜索结果接收蛋白质名称并提供数据###
#######我需要传递到html文件:results.html#########################
如果((搜索结果(蛋白质名称)!=“未输入蛋白质”)&(搜索结果(蛋白质名称)!=“未找到结果”):
所有变量=搜索结果(蛋白质名称)
#####all_vars是一个字符串元组,如gene_name、json文件和整数
打印(“内容类型:text/html”,“\n\n”)
打印(“”)
''')

对如何进行有什么建议吗?感谢您的帮助,谢谢

您可能已经发现,您当前的技术会重定向到'results.html',但在其他方面会丢弃任何结果。我不知道你的具体目标是什么,但一种方法是将“results.html”作为一个简单的模板。您的脚本将填充它并返回它以响应每个请求。在下面的示例中,“results.html”可以包含任意html以及行“######”将替换为您的输出

#!/Users/<username>/opt/anaconda3/bin/python

import sys
import pandas as pd
import numpy as np
import cgi
import cgitb
cgitb.enable()

def process_results(results):
    if results=='No protein entered' or results=='No results found':
        return results
    # else do something with results, e.g., format into an HTML table
    buf = '<table>\n'
    for result in results:
        buf += f'<tr><td>{cgi.escape(str(result))}</td></tr>\n'
    buf += '</table>\n'
    return buf

form = cgi.FieldStorage() 
protein_name = form.getvalue('protein_name')
results = search_results(protein_name)

print("Content-type: text/html\n")
with open('results.html') as template:
    for line in (x.rstrip() for x in template):
        if line == '##RESULTS##':
            print(process_results(results))
        else:
            print(line)
#/用户//opt/anaconda3/bin/python
导入系统
作为pd进口熊猫
将numpy作为np导入
导入cgi
进口cgitb
cgib.enable()
def过程_结果(结果):
如果结果=='未输入蛋白质'或结果=='未找到结果':
返回结果
#或者对结果进行处理,例如,格式化为HTML表格
buf='\n'
对于结果中的结果:
buf+=f'{cgi.escape(str(result))}\n'
buf+='\n'
返回buf
form=cgi.FieldStorage()
protein\u name=form.getvalue('protein\u name')
结果=搜索结果(蛋白质名称)
打印(“内容类型:text/html\n”)
以open('results.html')作为模板:
对于行输入(x.rstrip()用于模板中的x):
如果行=“###结果##”:
打印(处理结果(结果))
其他:
打印(行)
祝你好运