Page 1 of 1

PHP running Python script - not waiting for Python script to

Posted: Mon Jun 08, 2009 7:02 pm
by apw235
Hey -

Running these on a Linux server with PHP 5 and Python 2.5.

My problem is this: I have a simple php form that executes a long (~3 minutes) Python script using the 'exec' function from php. The issue is that the browser, I think, 'times out' before the Python script is finished and therefore kills Python and displays no output from Python. After some intense googling, I haven't found an answer, but I found a potential solution that I really want to avoid (manually opening a process that runs in the background, and checking its status until it is complete, then refreshing the web page). I'd much rather find an easier way to do this, and thus I am asking for help either way. If my only option is to open a job and monitor its status, could someone help guide me through coding this? I've tried naïvely doing exec("/path/to/executable arg1 arg2 >> /path/to/logfile 2>&1 &") but it seems as though even this dies when the browser times out. Thanks!

-Adrian

Re: PHP running Python script - not waiting for Python script to

Posted: Mon Jun 08, 2009 7:28 pm
by mikemike
Have you tried just changing all of your server settings to stop it timing out? This includes apache's as well PHP's

Re: PHP running Python script - not waiting for Python script to

Posted: Mon Jun 08, 2009 11:32 pm
by apw235
Hey -

Taken from the PHP manual:
Note: The set_time_limit() function and the configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(), stream operations, database queries, etc. is not included when determining the maximum time that the script has been running.
Another strange thing - say my python code looks like this:

Code: Select all

import sys
import os
 
thisPID = os.getpid()
print thisPID
 
RADeg = float(sys.argv[1])
decDeg = float(sys.argv[2])
clipSizeDeg = float(sys.argv[3])
 
ic.myFunction(RAdeg, decDeg, clipSizeDeg)
 
os.system(SOME LONG COMMAND)
 
for i in os.listdir(blah):
    os.system("gunzip BLAH")
If I throw random print statements in there, say like this:

Code: Select all

import sys
import os
 
thisPID = os.getpid()
print thisPID
 
print "1"
 
RADeg = float(sys.argv[1])
decDeg = float(sys.argv[2])
clipSizeDeg = float(sys.argv[3])
 
print "2"
 
ic.myFunction(RAdeg, decDeg, clipSizeDeg)
 
print "3"
 
os.system(SOME LONG COMMAND)
 
print "4"
 
for i in os.listdir(blah):
     print i
     os.system("gunzip BLAH")
It prints all of these numbers from the print statements, but doesn't execute the rest of the code - the stuff that I actually want it to do...any ideas?

Re: PHP running Python script - not waiting for Python script to

Posted: Tue Jun 09, 2009 8:57 am
by mikemike
You could always do this on a Windows box as then the measured time is real