[Tutor] Problem Passing VARs to Python from PHP & capturing return string

Roy Hinkelman royhink at gmail.com
Tue Oct 26 21:55:30 CEST 2010


I am posting here as well as a PHP list since I am now getting an odd python
error.



Rance: Thanks for the note. I get the same error with system or exec or
passthru



Now, this is very strange.



I made the command line string more explicit, and now it recognizes the .py
script but returns a python error:



Content:

Data: ImportError: No module named mechanize

Command: C:\WINDOWS\system32\cmd.exe C:\Program%20Files\Python26\python.exe
/c D:\Inetpub\AtoZ\hometown\include\weatherFeed.py -c Tampa -s FL



My python script will run correctly in IDE shell and from command line. I
used easy_install to install mechanize. It seems to be recognizing my other
modules (BeautifulSoup, re, urllib2, sys).



So, it seems that the script is being activated by the exec command since I
am now getting a python error. But, why would I get a python error when it
will run from command line?



Here is my PHP:

[code]

      <?PHP

            error_reporting(E_ALL);



            $city = 'Tampa';

            $state = 'FL';

            echo  '<p>OPTION 1<p>Python Weather Feed for ' . $city . ', ' .
$state . '<p>';



            ob_start();

            $command = "C:\WINDOWS\system32\cmd.exe
C:\Program%20Files\Python26\python.exe
/c  D:\Inetpub\AtoZ\hometown\include\weatherFeed.py -c " .  $city . " -s " .
$state;



            $data = exec($command . " 2>&1", $result);

            $content=ob_get_contents();

            ob_end_clean();



            echo 'Content: ' . $content . '<br>';

            echo 'Result: ' . $result . '<br>';

            echo 'Data: ' . $data . '<br>';

            echo 'Command: ' . $command . '<br>';

            include('include\weatherFeed_TEMP.txt')

      ?>

[/code]



and I've modified my python, making it a function [code] #!C:\Program
Files\Python26\python.exe -u # Current weather feed # # Weather page
sources: http://www.weather.gov/ # Capture relevant data, strip unusable
stuff out, fix URLs, display in our HTML page



# import program modules

from BeautifulSoup import BeautifulSoup as B_S import re, urllib2, sys,
mechanize # 'standard' set



### Return small weather table

def weatherSmall(c,s):

    cityState = c + ', ' + s

    query = 'Chicago, IL' #Test!!!

    _URL = "http://www.weather.gov/"



    br=mechanize.Browser()

    br.open( _URL )

    br.select_form( nr=1 ) #assuming form is 2nd form on page

    br['inputstring'] = query

    html = br.submit()



    _soup = B_S(html)



    # finding the correct table

    _step1 = _soup.findAll('table', limit=7)[6]

    col = _step1.findAll('td')

    # sys.argv is included below as a test.

    _thumb = '<table><tr><td colspan=2>Forecast for ' + query + '<br>' +
str(sys.argv) + '</td></tr><tr>' + str(col[0]) + str(col[1]) +
'</tr></table>'

    _thumb = _thumb.replace( '11%','50%' )

    _thumb = _thumb.replace( '/images/', 'images/weather/' )



    #write to txt file TEST

    _temp = 'D:\\Inetpub\\AtoZ\\hometown\\include\\weatherFeed_TEMP.txt'

    temp = open( _temp, 'w' )

    temp.write( _thumb )

    temp.close()



    return _thumb



city = 'Establish'

state = 'Variables'

count = 0

for ea in sys.argv:

    if ea == '-c':

        city = sys.argv[count+1]

    elif ea == '-s':

        state = sys.argv[count+1]

    count+=1

_result = str(weatherSmall(city,state))

#print _result

[/code]



Roy Hinkelman

Technical Services

Website Development & Management

707-774-7411

roy at worldtradepress.com

________________________________



-----Original Message-----

From: Rance Hall [mailto:ranceh at gmail.com]

Sent: Saturday, October 23, 2010 10:25 AM

To: roy at worldtradepress.com

Subject: Re: [Tutor] Problem Passing VARs to Python from PHP & capturing
return string



On Fri, Oct 22, 2010 at 1:28 PM, Roy Hinkelman <
rhinkelman at worldtradepress.com> wrote:

> My script doesn't want to recognize the variables from the exec()

> command in PHP. Plus, it won't capture the results of the script.

>

> This Python script works in IDLE, and I've got some testing code in there.

>

> One Known Unsolved Issue:

> I put Python in C:\Program Files\Python26\python.exe and have tried

> $command = "C:\Program Files\Python26\python.exe

> include/weatherFeed.py -c $city -s $state"; to no avail.

>

> I added .py to Windows IIS Web Service Extensions and to the

> Application Configuration.

>

> Any help appreciated.

>



<code snipped for brevity>



Ok, so you wrote a Python script to create a text file, and you want PHP to
include that text file in a web page.



I'm assuming that your Python is working on its own.



I also see you are running this from a windows server.



According to the PHP site the exec function takes option arguments that you
are not using:



string exec ( string $command [, array &$output [, int &$return_var ]] )



Might I suggest that you switch from exec to system()



documented here:  http://www.php.net/manual/en/function.system.php



string system ( string $command [, int &$return_var ] )



Since it doesn't appear that your Python script has any output except for
the text file, it might be better to call it from system() because

system() does not care about the output of the called program.



May I also suggest that you actually track the return_var somewhere.

You can check the status of the return_var to ensure that the system() call
competed successfully or not before including the text file, on the off
chance that it isn't there.



Someone else has already suggested to you that this is a Python list and you
should probably take this to the PHP list.  I agree, but the teacher in me
just couldn't leave the answer as "take it to another forum" without some
guidance.  Good luck.



Rance
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20101026/7ed8f77f/attachment-0001.html>


More information about the Tutor mailing list