2013-11-05 4 views
7

Sto scrivendo una semplice applicazione che utilizza le informazioni da un modulo, passa attraverso $ _POST a uno script PHP che esegue uno script python ed emette i risultati. Il problema che sto avendo è che il mio script python non è effettivamente in esecuzione con gli argomenti vengono passati nel file diEsecuzione di script Python con variabili PHP

process3.php:.

<?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; 
?> 

uscita:

Start word: dog 
End word: cat 
Results from wordgame.py... 
Number of arguments: 1 arguments. Argument List: ['wordgame2.py'] 

Nella parte superiore del il mio wordgame2.py, ho il seguente (per scopi di debug):

#!/usr/bin/env python 
import sys 
print 'Number of arguments:', len(sys.argv), 'arguments.' 
print 'Argument List:', str(sys.argv) 

Perché non è l'insensibile er di argomenti passati = 3? (Sì, il mio modulo invia correttamente i dati.)

Qualsiasi aiuto è molto apprezzato!

Edit: mi permetto di aggiungere che viene eseguito quando ho esplicitamente detto che la parola inizio e la fine ... qualcosa di simile:

$output = passthru('python wordgame2.py cat dog'); 
echo $output 
+0

Cosa vedi quando "echo" python wordgame2.py $ start_word $ end_word "nel tuo file php? – GWW

+0

Dopo aver aggiunto quella linea, ora uscite: Inizio parola: cane canale di fine: gatto I risultati di wordgame.py ... pitone cane wordgame2.py gatto numero di argomenti: 1 argomenti. Elenco argomenti: ['wordgame2.py'] – Micah

+0

Penso che l'errore si trovi in ​​'$ output = passthru ('python wordgame2.py $ start_word $ end_word');' Prova questo '$ output = passthru ('python wordgame2.py' . $ start_word. "".$ end_word); 'Forse, python sta rifiutando gli argomenti dovuti alla parola chiave $ (o forse $ sta invocando la shell per il riposizionamento variabile) –

risposta

9

Update -

Ora che sono a conoscenza di PHP, l'errore sta nell'usare le virgolette singole '. In PHP, le singole stringhe tra virgolette sono considerate letterali, PHP non valuta il contenuto al suo interno. Tuttavia, le stringhe con doppia quotatura " vengono valutate e funzionano come ci si aspetta da esse. Questo è splendidamente riassunto in this SO answer. Nel nostro caso,

$output = passthru("python wordgame2.py $start_word $end_word"); 

avrebbe funzionato, ma quanto segue non sarà -

$output = passthru('python wordgame2.py $start_word $end_word'); 

risposta originale -

Credo che l'errore sta nel

$output = passthru("python wordgame2.py $start_word $end_word"); 

Prova questo

$output = passthru("python wordgame2.py ".$start_word." ".$end_word); 
+1

Non sarebbe la soluzione ovvia usare" invece di "? Non c'è bisogno di concatenare quando" fa variabile interpolazione. –

+0

Hmm ... non ho molta familiarità con PHP (nessuno), quindi solo la mia risposta inizia con * Penso che ... * –

+1

Inoltre, probabilmente è utile usare 'escapeshellarg()' sui due argomenti passati quando si concatenano . – Terry

1

Grazie per il vostro contributo. Ho capito il mio problema con questo semplice correzione:

$command = 'python wordgame2.py ' . $start_word . ' ' . $end_word; 
$output = passthru($command); 

Affinché passante per gestire correttamente le variabili PHP, ha bisogno di essere concatenati in stringa prima dell'esecuzione.

+2

Invece di postare la tua risposta, che è la risposta di Ashish, per favore accetta la sua risposta. – aIKid

+0

Avevo postato questo prima di vedere la sua risposta. Si prega di guardare il timestamp. – Micah

+0

In realtà, ho risposto 7 secondi prima :) Il downvote era inutile/non verificato. –