2017-12-02 8 views
0

私はWebサーバーを使い、CGIモジュールを使ってPythonルーチンを呼び出しています。それは難しいですが、それはうまく動作します:)CGI Pythonスクリプトが実行された後、どのようにして私のホームページに自動的に戻ることができますか?

私の問題は、Pythonスクリプトの実行後、私のスクリプトで私のホームページにリダイレクトするルーチンを導入したいと思います。

私はこのフォーラムでこのような質問を見たことがあります。ほとんどの場合、答えはコマンドラインprint("Location:http://your_page")を使用しますが、私はすでにそれを実行しており、私の場合は動作しません。

次の段落で私は私の全体的な "ミニプロジェクト"を説明しようとし、私はあなたのコードを見せてくれます。

インターネットによる無線ホームシステムのリモートコントロール。言語PythonとPHP、またLinux知識O.S.

  • このプロジェクトの目的は、Webページ(インターネット接続)のボタンをクリックしてLEDをオンまたはオフにすることです。 LEDは自宅のどこかの無線モジュールにあります。

  • BeagleBone Black(Debian O.S.)上で動作するApache2 Webサーバーを設定します。ビーグルボーンブラックは、UTPケーブルを介してLANに接続されています。

  • ESP32モジュールをTCPサーバーとしてプログラミングし、Wi-Fi(LAN)にも接続します。

  • プログラムされたESP32モジュールとのTCPクライアント接続を実行し、LEDの点灯と消灯を命令するCGIモジュールとしてのPythonスクリプト。スクリプトは、Webページ内のボタンがクリックされると実行されます。

  • Modem/Routerでポートを前方に設定すると、インターネットからWeb Serverにアクセスできます。

の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> 

これは私の結果のホームページです。私のPythonスクリプトは、ルーチンを実行しますが、戻って私のホームページにリダイレクトされません。その結果 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>") 

。あなたは自分で次の画像の結果を見ることができます。このWebページは永遠に残っています。

Final web page

あなたは、任意のアイデアを持っていますか?自分のホームページに戻るためにPythonコードに挿入する必要があるのは何ですか?

ありがとうございます。本当にありがとうございます。

注:私はあなたがあなた自身の出力リダイレクトを印刷したい場合は、リダイレクトを行うには、あなた応じて、簡単なJavaScriptをスニペットを放出する必要がありますのPython 3に

+0

簡単な方法は、現在のLEDステータスのように表示する追加情報とともに、ページを書き直すようにCGIスクリプトを作成することです。 [この古い私の回答](https://stackoverflow.com/a/26059792/4014959)は、あなたのために働く別の方法を示しています。申し訳ありませんがPython 2にありますが、それは修正するのに十分なはずです。 FWIWでは、CGIは最近非常に昔ながらのものと考えられていますが、シンプルなものにはまだ便利だと思います。しかしそれほど簡単ではないもののためにすぐに苦痛を受けます。 ;) –

+0

'入力クラス=ボタンonClick =" location.href = 'http:// my_web_page.net/cgi-bin/TCPC $ '< - その行が正しくありません... – dda

答えて

0

を使用しています。

CGIからの出力はまったく必要ない場合は、ヘッダーを終了するダブル\ n \ nを印刷する前に、Location:ヘッダーを印刷する必要があります。また、 "擬似"ヘッダーのStatus:を追加して、301または302応答コードを設定する必要があります。

+0

私が提案したように文章プリント( "Content-type:text/html \ n \ n")の前の文章print( 'Location:http://my_home_page.net/¥n')は完璧です。とにかく、「Javaスクリプト」の小さな例を投稿してもらえますか?私の考えはCGIページに「コードが実行され、ホームページに3秒でリダイレクトされます」というメッセージが表示されます。もう一度ありがとう!!!! – mreyesp

関連する問題