执行CGI Python脚本后,如何自动返回我的主页?

时间:2017-12-02 21:18:30

标签: php python linux apache2 cgi

我一直在使用Web服务器并使用CGI模块调用Python例程。这很有挑战性,但它运作良好:)

我的问题是在Python脚本执行之后,我想在我的脚本中引入一个例程,再次重定向到我的主页。

我在这个论坛中看到类似这样的问题,大多数情况下的答案是:使用命令行print("Location:http://your_page"),但我已经完成了它并且在我的情况下不起作用。

在下一段中,我将尝试解释我的整个“迷你项目”,然后我会让你看到我的代码。

通过互联网远程控制无线家庭系统。语言Python和PHP,也是Linux知识O.S。

  • 此项目的目的是点击网页上的按钮(互联网连接)打开和关闭LED。 LED位于家中的某个无线模块中。

  • 设置在BeagleBone Black(Debian O.S.)上运行的Apache2 Web服务器。 Beagle Bone Black通过UTP电缆连接到LAN。

  • 将ESP32模块编程为TCP服务器并连接到Wi-Fi(LAN)。

  • 编程的Python脚本作为CGI模块,用于执行与ESP32模块的TCP客户端连接,并命令转动然后关闭LED。在网页中单击按钮时执行脚本。

  • 在调制解调器/路由器上设置端口转发,以允许从Internet访问Web服务器。

index.html(主页)

<!DOCTYPE html>
<html>
  <head>
    <title>Web Server MReyesP!</title>
    <style>
      .button {
        padding: 15px 25px;
        font-size: 24px;
        text-align: center;
        cursor: pointer;
        outline: none;
        color: #fff;
        background-color: #4CAF50;
        border: none;
        border-radius: 15px;
        box-shadow: 0 9px #999;
      }
      .button:hover {background-color: #3e8e41}
      .button:active {
        background-color: #3e8e41;
        box-shadow: 0 5px #666;
        transform: translateY(4px);
      }
    </style>
  </head>
  <body>
    <h1>Success! The Web Server is working :)</h1>
    <h2>Click the Button to run - "LED On/Off program"</h2>
    <input class=button onClick="location.href='http://my_web_page.net/cgi-bin/TCPC$
  </body>
</html>

这是我生成的主页。 Home page

python_script.py

#!/usr/bin/python3

import socket
import time
import cgitb
cgitb.enable()

print("Content-type: text/html\n\n")
print("<html>\n<body>")
print("<div style=\"with:100%; font-size: 40px; font-weight bold; text-align: c$
print("The LED was turned On and after 2 seconds was turned Off")
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ip="192.168.2.112"
port=1234
address=(ip,port)
client.connect(address)
data = 'led_on'
client.sendall(data.encode('utf-8'))
time.sleep(2)
data = 'led_off'
client.sendall(data.encode('utf-8'))
client.close()
print("Location: http://my_web_page.net/\n")
print("</div>\n</body>\n</html>")

结果我的Python脚本执行例程,但没有重定向回我的主页。您可以自己查看下一张图片中的结果。这个网页永远存在。

Final web page

你有什么想法吗?我需要在Python代码中插入什么才能返回主页?

谢谢大家,非常感谢您的时间和帮助。

注意:我使用的是Python 3。

1 个答案:

答案 0 :(得分:0)

如果您要打印自己的输出重定向,则需要在响应中发出一小段简单的javascript来执行重定向。

如果您根本不需要CGI的输出,则需要在打印终止标题的双\ n \ n之前打印Location:标题。你还需要添加&#34;伪&#34;标题状态:设置301或302响应代码。