cgi and popen
A long story made short, I've build a python/cgi website consisting of two pages. Page1 has a html form in which you can input a series of queries. Then via Popen it starts a pythons search script, which stores the results in a python shelve. As the Popen command is given it should redirect to page2, which will check if the shelve is ready (search finished) and if not displays a search page, refreshing itself after 10 seconds. The Popen command works nice when tried out in the console. The script isueing the Popen quits, and the other process keeps on running till finished. But when embedded in page1.cgi, page 1 waits till the search is finished, resulting in a browser timeout when big queries are done. It was this problem in the first place why I split up the page in two and added Popen. Does anybody know how to get the page not waiting on Popen to finish? thnx Maarten -- http://mail.python.org/mailman/listinfo/python-list
Re: cgi and popen
In article <[EMAIL PROTECTED]>, Thomas Guettler <[EMAIL PROTECTED]> wrote: > Am Wed, 07 Jun 2006 14:54:41 +0200 schrieb Maarten van Veen: > > > A long story made short, I've build a python/cgi website consisting of > > two pages. Page1 has a html form in which you can input a series of > > queries. Then via Popen it starts a pythons search script, which stores > > the results in a python shelve. > > As the Popen command is given it should redirect to page2, which will > > check if the shelve is ready (search finished) and if not displays a > > search page, refreshing itself after 10 seconds. > > The Popen command works nice when tried out in the console. The script > > isueing the Popen quits, and the other process keeps on running till > > finished. > > Hi, > > You can find out where the process hangs, by > sending SIGINT to the python script: > > kill -SIGINT PID > > This is like ctrl-c, you should get a traceback. > > If the page1 script is not alive anymore, during > the unwanted waiting, this does not work. > > Which form of popen do you use? Popen4 is the best, > because you cannot get a deadlock if there is output > on stdout and stderr. > > I guess you have the same strange thing, if you > ssh to the server, start the script1 and you want > to logoff before the subprocesses is finished. > > You can try to start the script like this: > > nohup nice mein-script >> $HOME/log/mein-script.log 2>&1 > HTH, > Thomas Thx for your reply Thomas. I use subprocess.Popen, because popen 1t/m 4 are deprecated. I found a dodgy way around my problem though. By inserting another page between the input and the results page,a user sees a "i'm searching" page which wants to redirect to the results page directly, but keeps waiting for the search process to finish. So I put what used to be my problem to good use. :D Maarten -- http://mail.python.org/mailman/listinfo/python-list
Re: creating and naming objects
In article <[EMAIL PROTECTED]>, "Brian" <[EMAIL PROTECTED]> wrote: > I have a question that some may consider silly, but it has me a bit > stuck and I would appreciate some help in understanding what is going > on. > > For example, lets say that I have a class that creates a student > object. > > Class Student: > def setName(self, name) > self.name = name > def setId(self, id) > self.id = id > > Then I instantiate that object in a method: > > def createStudent(): > foo = Student() > /add stuff > > Now, suppose that I want to create another Student. Do I need to name > that Student something other than foo? What happens to the original > object? If I do not supplant the original data of Student (maybe no id > for this student) does it retain the data of the previous Student > object that was not altered? I guess I am asking how do I > differentiate between objects when I do not know how many I need to > create and do not want to hard code names like Student1, Student2 etc. > > I hope that I am clear about what I am asking. > > Thanks, > Brian Hi Brian, If you would do it like this: Class Student: def setName(self, name) self.name = name def setId(self, id) self.id = id def createStudent(): foo = Student() foo.setName("Brian") foo = Student() print foo.getName() You would get an error here, because foo now equals the second Student object which has no name. And you can't get to the first one. Perhaps you could do something like this. Class Student: def setName(self, name) self.name = name def setId(self, id) self.id = id listWithStudents = [] def createStudent(): listWithStudent.append(Student()) Now every student you create is put in the list with students so you can access them but don't have to give them names. You could do something to all of them like this: for student in listWithStudent: student.doSomething() Or change just one student: listWithStudent[23].doSomething() # this is the 24th student though!!! Hope this is what you're looking for. Maarten -- http://mail.python.org/mailman/listinfo/python-list