2017-12-02 207 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