Executing Python Script with PHP Variables
Solution 1
Update -
Now that I am aware of PHP, the mistake lies in using the single-quotes '
. In PHP, single quoted strings are considered literals, PHP does not evaluate the content inside it. However, double quoted "
strings are evaluated and would work as you are expecting them to. This is beautifully summarized in this SO answer. In our case,
$output = passthru("python wordgame2.py $start_word $end_word");
would work, but the following won't -
$output = passthru('python wordgame2.py $start_word $end_word');
Original answer -
I think the mistake lies in
$output = passthru("python wordgame2.py $start_word $end_word");
Try this
$output = passthru("python wordgame2.py ".$start_word." ".$end_word);
Solution 2
Thank you for your contributions. I have figured out my problem with this simple fix:
$command = 'python wordgame2.py ' . $start_word . ' ' . $end_word;
$output = passthru($command);
In order for passthru to properly handle the php variables, it needs to be concatenated into the string before executing.
Micah
Updated on July 19, 2022Comments
-
Micah almost 2 years
I am writing a simple application that uses information from a form, passes it through $_POST to a PHP script that executes a python script and outputs the results. The problem I am having is that my python script is not actually running with the arguments being passed in.
process3.php file:
<?php $start_word = $_POST['start']; $end_word = $_POST['end']; echo "Start word: ". $start_word . "<br />"; echo "End word: ". $end_word . "<br />"; echo "Results from wordgame.py..."; echo "</br>"; $output = passthru('python wordgame2.py $start_word $end_word'); echo $output; ?>
Output:
Start word: dog End word: cat Results from wordgame.py... Number of arguments: 1 arguments. Argument List: ['wordgame2.py']
At the top of my wordgame2.py, I have the following (for debugging purposes):
#!/usr/bin/env python import sys print 'Number of arguments:', len(sys.argv), 'arguments.' print 'Argument List:', str(sys.argv)
Why isn't the number of arguments being passed = 3? (Yes, my form does send the data correctly.)
Any help is greatly appreciated!
Edit: I might add that it does run when I explicitly tell it the start and end word... something like this:
$output = passthru('python wordgame2.py cat dog'); echo $output
-
aIKid over 10 yearsInstead of posting your answer, which is ashish's answer, please accept his answer.
-
Micah over 10 yearsI had posted this before I saw his answer. Please look at the time stamp.
-
scandinavian_ over 10 yearsWouldn't the obvious solution be using " instead of '? No need to concatenate when " does variable interpolation.
-
shad0w_wa1k3r over 10 yearsHmm...am not much familiar with php (none at all), so only my answer begins with I think...
-
shad0w_wa1k3r over 10 yearsActually, I answered 7 seconds before :) The downvote was unnecessary/unverified.
-
Terry about 8 yearsAlso, probably good to use
escapeshellarg()
on the two arguments passed in when concatenating.