0
我有一些用django/python編寫的代碼。主要原因是HTTP響應是一個生成器函數。它在瀏覽器窗口中逐行掃描子進程的輸出。這在我使用django測試服務器時非常有效。當我使用真實的服務器時,它會失敗/基本上它只是在您按下頁面上的提交按鈕之前彈出。django生成器函數不能與真正的服務器一起工作
@condition(etag_func=None)
def pushviablah(request):
if 'hostname' in request.POST and request.POST['hostname']:
hostname = request.POST['hostname']
command = "blah.pl --host " + host + " --noturn"
return HttpResponse(stream_response_generator(hostname, command), mimetype='text/html')
def stream_response_generator(hostname, command):
proc = subprocess.Popen(command.split(), 0, None, subprocess.PIPE, subprocess.PIPE, subprocess.PIPE)
yield "<pre>"
var = 1
while (var == 1):
for line in proc.stdout.readline():
yield line
任何人有任何建議如何讓這與真正的服務器上工作?甚至如何調試它不工作的原因?
你能更新服務器設置嗎?你只是使用內部服務器進行開發/測試和其他生產? – rajasaur
@rajasaur我正在運行'python manage.py runserver 0.0.0.0:8080'用於測試目的。然後我部署代碼並在真實服務器上運行它。真正的服務器使用相同的settings.py,所以我期望有相同的結果。除了我在服務器上運行的應用程序之外,沒有別的東西了。我可以做所有的調試和弄亂我想要的東西。 – evolution
更新: 我發現生成器函數實際上正在運行,但它必須在httpresponse在屏幕上拋出一個頁面之前完成。我不希望在用戶看到輸出之前等待它完成。我希望用戶在子進程進行時看到輸出。 – evolution