On Feb 8, 10:42 am, "Karthik Gurusamy" <[EMAIL PROTECTED]> wrote: > On Feb 6, 5:26 am, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote: > > > Hello, > > > I am trying to write a python cgi that calls a script over ssh, the > > problem is the script takes a very long time to execute so Apache > > makes the CGI time out and I never see any output. The script is set > > to print a progress report to stdout every 3 seconds but I never see > > any output until the child process is killed. > > > Here's what I have in my python script: > > > command = "ssh -l root %s /scripts/xen/xen-create-win-vps1.sh %s" % > > (host, domuname) > > output = os.popen(command) > > Apart from other buffering issues, it could be very well that ssh > returns all the output in one single big chunk. Try running the ssh > command (with the trailing 'command') from your shell and see if it > generates output immediately. > > There may be some option to make ssh not buffer the data it reads from > the remove command execution. If there is no such option, most likely > you are out of luck. In this case, even if you making your remote > script unbufferred, ssh may be buffering it. > > If both the machines have any shared filesystem, you can do a trick. > Make your script write it's output unbuffered to a file. Since the > file is mounted and available on both the machines.. start reading the > file from this main python script (note that you may need a thread to > do it, as your script will anyway be stuck waiting for the ssh to > complete). > > Karthik > > > for line in output: > > print line.strip() > > > Here's a copy of the bash script. > > >http://watters.ws/script.txt > > > I also tried using os.spawnv to run ssh in the background and nothing > > happens. > > > Does anybody know a way to make output show in real time?
You could also try flushing the buffer after each status message -- http://mail.python.org/mailman/listinfo/python-list