2017-12-02 220 views
0

我一直在玩Web服务器,并使用CGI模块调用Python例程。这是具有挑战性的,但它工作正常:)执行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电缆连接到局域网。

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

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

  • 在调制解调器/路由器上设置端口以允许从互联网访问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

+0

一个简单的方法是让你的CGI脚本重新写入页面,以及任何你想要显示的额外信息(如当前的LED状态)。 [这是我的旧回答](https://stackoverflow.com/a/26059792/4014959)显示_may_为您工作的另一种方式。对不起,它在Python 2中,但应该很容易修复。 FWIW,CGI现在被认为非常老套,但我想它对于简单的东西仍然很方便。但对于不那么简单的东西,它很快就会变得很痛苦。 ;) –

+0

' dda

回答

0

如果你想打印自己的输出重定向,你需要发出简单的JavaScript代码段在你的回应做重定向。

如果根本不需要CGI的输出,则需要打印Location:标题,然后再打印终止标题的双精度\ n \ n。您还需要添加“伪”标题状态:设置301或302响应代码。

+0

正如你所建议的,我把在sentece print(“Content-type:text/html \ n \ n”)之前的句子print('Location:http://my_home_page.net/\n')并且工作完美,就像你永远不会放弃主页无论如何,您能否请您发布一个“java脚本”的小例子?我的想法是在我的CGI页面中显示一条消息,例如“您的代码已执行,您将在3秒内重定向到主页”。再次感谢! – mreyesp