Hoi Ronnie,
Bedankt voor je heldere voorbeeld. Het werkt, maar helaas zoals je al zei slechts in bepaalde browsers.
Als ik javascript gebruik, zou dat de time-out ook oplossen?
Een andere mogelijkheid die ik bedacht had is om een onafhankelijk process te openen en het het python scriptje steeds opnieuw aan te laten roepen door een 'META HTTP-EQUIV="refresh"' pagina te laten printen. Dit lijkt te werken! Is dit een goede methode?
mijn script:
#!/usr/bin/env python
import cgi
import os.path
import subprocess
import sys
#debuggen
import cgitb; cgitb.enable()
def wachtpagina(id,stap):
#print wachtstap met teller om aantal aanroepen te tonen
#de key ID geeft process ID aan
print """Content-Type: text/html\n\n\n
<html>
<META HTTP-EQUIV="refresh" content="2; URL=fork2.py?ID=%s&step=%d">
<HEAD>
<TITLE>Waiting</TITLE>
</Head>
<BODY>
Waiting...%d
</BODY>
</html>
""" % (id,stap,stap)
param=cgi.FieldStorage()
#als er een parameter ID is, dan is er een process opgestart.
#ID geeft dan het process nummer (ID) aan, uniek voor het proces
if param.has_key('ID'):
id=param['ID'].value
if os.path.exists("/proc/%s" % str(id)):
#print wachpagina
wachtpagina(id,int(param['step'].value)+1)
else:
#process klaar, dus ga verder.
print 'Content-Type: text/html\n'
print
print 'ready'
else:
#Subprocess om een process te starten die onafhankelijk van
#het hoofdprocess door blijft gaan (geen stdout, dus nar PIPE
#fork1.py simuleert het langlopende process
pid = subprocess.Popen([sys.executable, "fork1.py"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
#laat wachtpagina zien
wachtpagina(str(pid.pid),1)
fork1.py is hierin en apart python scriptje, in mijn echte code ga ik natuurlijk een ander programma aanroepen:
#!/usr/bin/env python
import time
time.sleep(20)