好吧,我設法讓它工作得如何我想要的(儘管有些/大多數人可能會不同意這種方法)。我按照下面的建議使用了Flask。可能被認爲是「錯誤」的部分是404檢查循環。這是不適當的設計,並導致一些瀏覽器的「卡住腳本」錯誤,如果它繼續太久。但是,我想運行的腳本不會持續足夠長的時間,因爲這是一個問題。創建一個執行python腳本的超鏈接(或按鈕),然後在腳本完成時重定向
感謝您的幫助,請讓我知道如果您有任何其他建議。
瓶應用:
import threading
import subprocess
import os
import sys
from flask import Flask
from flask import render_template, abort
app = Flask(__name__)
app.debug = True
def run_script():
theproc = subprocess.Popen([sys.executable, "run_me.py"])
theproc.communicate()
@app.route('/')
def index():
return render_template('index.html')
@app.route('/generate')
def generate():
threading.Thread(target=lambda: run_script()).start()
return render_template('processing.html')
@app.route('/is_done')
def is_done():
hfile = "templates\\itworked.html"
if os.path.isfile(hfile):
return render_template('itworked.html')
else:
abort(404)
if __name__ == "__main__":
app.run()
processing.html:
<!DOCTYPE html>
<html>
<head>
<script src="/static/jquery.min.js"></script>
</head>
<body>
<p>Processing...</p>
<script>
setInterval(function()
{
var http = new XMLHttpRequest();
http.open('HEAD', "is_done", false);
http.send();
if (http.status==200)
window.location.replace("is_done");
},2000);
</script>
</body>
</html>
原題:
我是一個初級/中級Python程序員和一個開始web開發人員,所以請溫柔。 我想要什麼: 用戶點擊一個超鏈接,並被帶到一個類似「處理...」的中間網頁。在後臺(在服務器上),此鏈接觸發一個處理文件並創建新網頁的python腳本。完成腳本後,用戶將重定向到新創建的頁面。 我有: 我有一個腳本來完成處理並吐出一個新頁面。我沒有想到的是如何觸發python腳本,然後在腳本完成時觸發重定向。我看過像django和cgi腳本這樣的web框架。但我還沒有發現任何我覺得符合法案的東西。我很可能錯過了一些完全明顯的東西,所以我非常感謝任何幫助。 謝謝。
您所描述的內容需要將全新的Web內容寫入磁盤上的文件,然後進行提供。這很不尋常。標準流程更像是:1.點擊按鈕並觸發來自服務器的頁面請求。 2.請求頁面的PHP後端處理請求中的querystring/form/cookie信息,並在請求的頁面中生成動態內容。 3.頁面發送給用戶。你確定這不是你想要的嗎? – jatrim
我很確定。我知道我在嘗試的是不尋常的。這就是爲什麼我需要幫助。 :) – bem3ry
你的暫停功能真的非常糟糕和有害,並浪費CPU週期大的時間。改爲使用'setTimeout'。此外,您的版本僅適用於生成一個文件,並且不會同時訪問您的網頁的多個人員,他們可能會嘗試同時生成該文件。也許在運行腳本之前檢查文件是否已經存在。 – mensi