【问题标题】:CGI & Python - return choice to python scriptCGI & Python - 将选择返回给 python 脚本
【发布时间】:2023-12-08 19:58:01
【问题描述】:

我有一个 python 脚本,一旦从命令行执行,就会执行所需的操作并退出。如果在执行过程中,程序无法执行选择,他会提示用户并要求他们做出决定!

现在我必须实现一个 Web 界面,问题就来了……我创建了一个带有简单表单的 htm 文件,一旦用户“提交”,他将参数传递给仅包含一行的 cgi 脚本并运行我的 python 程序!而且它似乎有效。

我的问题是:如果程序需要让用户做出选择,我该如何将这个值返回给我的 python 脚本?为了提示用户做出选择,我需要创建一个包含可能选择的网页……有人知道我如何用 python 打开网页吗?

第二个也是最重要的问题是:如何将网页中的值返回到我的“原始”python 模块?在python中我会简单地做一个

return choice

但是对于网页,我不知道该怎么做。

回顾:

  1. 从网页开始,我运行一个 cgi 脚本!完成

  2. 这个 CGI 脚本运行我的 python 程序...完成

  3. 如果程序无法做出决定,

    3a 创建一个网页,其中包含我可以做的可能选择

    3b 显示创建的网页?????????

    3c 将响应返回给原python模块????????

【问题讨论】:

  • 我建议你阅读一些关于python和CGI的教程材料:google.com/search?q=python+cgi+example
  • 嗨,我做到了……这不是 CGI 的问题!我的主要问题是我不知道如何将值从 HTML 网页返回到 python 程序!我在网上没有找到类似的东西......

标签: python cgi


【解决方案1】:

“有人知道我如何使用 python 打开网页吗?第二个也是最重要的问题是:如何将网页中的值返回到我的“原始”python 模块??”

这一切都很简单。

但是,您需要了解网络的真正含义。您需要了解 Web 服务器、浏览器和 HTTP 协议。

这是黄金法则:网络服务器使用网页响应 HTTP 请求。

该规则的第二部分是:请求是一个 URL 和一个方法(GET 或 POST)。请求还有更多内容,但这是重要的部分。

这就是曾经发生的一切。因此,您必须将您的用例重新转换为上述形式。

人点击书签;浏览器发出一个空请求(对“/”的 URL)并获得一个表单。

人填写表格,点击按钮;浏览器 POST 的请求(到表单中的 URL)并获得两件事之一。

  • 如果您的脚本有效,他们会在页面上显示一切正常。

  • 如果您的脚本需要信息,他们会获得另一种形式。

人填写表格,点击按钮;浏览器 POST 请求(发送到表单中的 URL)并获得表明一切正常的最终页面。

您可以通过“CGI”脚本完成所有这些操作。使用 mod_wsgi 并将你的东西插入 Apache Web 服务器。

或者,您可以获得一个 Web 框架。 Django、TurboGears、web.py 等。即使您认为自己的操作很简单,您也会对框架更满意。

【讨论】:

    【解决方案2】:

    如果 Python 脚本需要选择并接受选择作为参数,我认为您可以修改它以返回错误。如果这样做,您可以检查 cgi 脚本的返回值,并使用它来适当地调用 python 脚本并将信息返回给用户。

    不能直接调用python脚本有什么原因吗?如果您要避免中间 CGI,我怀疑您最终会得到一个更简洁的实现。

    您使用的是什么网络服务器?什么cgi语言? Perl 可能吗?

    【讨论】:

      【解决方案3】:

      网页不返回值,它们也不是程序——网页只是 HTML 的静态集合或浏览器可以显示的类似内容。您的 CGI 脚本不能等待用户发送响应 - 它必须将网页发送给用户并终止。

      但是,如果浏览器根据该页面中的数据对您的 CGI 程序(或不同的 CGI 程序)执行第二次查询,那么您可以通过这种方式收集信息并从该点继续。

      【讨论】:

        【解决方案4】:

        如果你用 python 编写你的 cgi 然后从 cgi 脚本调用你的 python 脚本,可能会更容易。

        更新您的脚本以将 UI 与逻辑分开。 那么将您的脚本与 (python) cgi 脚本接口应该相对容易。

        对于 python cgi 参考: Five minutes to a Python CGI

        【讨论】:

          【解决方案5】:

          http://docs.python.org/library/cgihttpserver.html

          我认为首先您需要将代码与界面分开。当你运行一个脚本时,它会输出一个页面。您可以使用 url 参数将参数传递给它。理想情况下,您想要执行您的逻辑,然后将结果传递到 python 打印到 cgi 的模板中。

          【讨论】: