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
Advertisement
Answer
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);