I am trying to run a Python program using PHP. Here's the code
$command = '/usr/local/bin/python script.py file';
$temp = exec($command, $output);
This works through the command line but not while running it through the browser. I am using Apache so probably it needs the right privileges? I am pretty new to Linux and have no idea how to get this working.
Any help would be appreciated!
Edit 1:
Tried to use proc_open but nothing happens. I gave the full path to the script. Made the script executable but no luck. Any other things I can try on the server? (It's a CentOS 5)
-
Don't do it like this if you have any real traffic. Running a new python script (without mod-python) will cost you dearly. Set up a separate, long-running python server (xml-rpc server?), and call it using IPC if you need to scale.wisty– wisty2010年02月08日 07:25:30 +00:00Commented Feb 8, 2010 at 7:25
-
Thanks! Just wanted to get this done as a demo. Yet to get my way around mod_wsgi/mod_pythonAbhinav– Abhinav2010年02月08日 11:54:23 +00:00Commented Feb 8, 2010 at 11:54
4 Answers 4
You need to pass the full path to the script and you also need to make sure that the script is readable by the user running the web server (which means every directory in the path must be +x to the web user).
1 Comment
Realized what was wrong:
The domain was set up as a virtual host and PHP's safe_mode was enabled. proc_open, exec, system, passthru etc. do not work under safe_mode I guess.
Put the script in the directory accessible by the vhost. Apache wasn't able to access the directories outside the vhost document root.
Thanks for the help!
Comments
Few checkpoints
- script.py should be pass full path, eg,
/home/abhinav/script.py - script.py should be executable,
chmod +x script.py
4 Comments
#!/usr/local/bin/python would need in first line of script.pypython <filename>)To get my CodeIgniter helper to run a python script, I had to put #!/usr/bin/python on the first line of my python script, and NOT call python from the exec.
+1 for also doing chmod +x
My helper looks like this:
<?php
function scrape($site, $key, $user_id)
{
$cmd = str_replace('system/','',BASEPATH).APPPATH."python/spider.py -u $site -k $key -i $user_id";
$resp = exec($cmd, $out);
return $out;
}
?>