running system command in cgi problem

Carsten Gaebler clpy at snakefarm.org
Fri Feb 22 11:06:21 EST 2002


Felix Seeger wrote:

> I've writen a small cgi/python script that starts a command on the server.
> This command may take about 30 minutes to finish. So my browser becomes a
> timeout.
> 
> Is there any way to run the command, and while it works send the browser
> every 30 secs a please wait string + refresh.

You could fork a child process which executes the command and let the
parent process wait for it to finish and print keepalive messages in
the meantime. This could look like the following. Note the '-u'
argument to python; it ensures that output is not buffered but sent to
the browser immediately.


#! /usr/bin/python -u
import os, time

print "Content-Type: text/plain"
print

print "Forking child"
if os.fork() == 0:
    # child process
    time.sleep(20)  # your command here
    os._exit(0)
else:
    # controlling parent process
    while 1:
        # check if child has exited, but don't block
        (pid, status) = os.waitpid(-1, os.WNOHANG)
        if pid > 0:
            print "Child finished!"
            break
        else:
            print "Please wait!"
            time.sleep(4)


Hope this helps.
cg.
-- 
Save the earth - it's our only source of chocolate.



More information about the Python-list mailing list