2013-11-05 105 views
7

我正在編寫一個簡單的應用程序,它使用窗體中的信息,將它通過$ _POST傳遞給執行python腳本並輸出結果的PHP腳本。我遇到的問題是,我的Python腳本實際上與在被傳遞的參數運行使用PHP變量執行Python腳本

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

輸出:

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

在頂部我的wordgame2.py,我有以下(用於調試目的):

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

爲什麼不麻木呃傳遞的參數= 3? (是的,我的表單確實發送了數據。)

任何幫助,非常感謝!

編輯:我想補充一點,它運行時,我明確告訴它開始和結束的字......是這樣的:

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

當你在你的php文件中echo'python wordgame2.py $ start_word $ end_word''時,你會看到什麼? – GWW

+0

加入該行後,現在輸出: 啓動Word:狗 結束字:貓從wordgame.py 結果... 蟒蛇wordgame2.py狗貓 的參數個數:1個參數。參數列表:['wordgame2.py'] – Micah

+0

我認爲錯誤在於'$ output = passthru('python wordgame2.py $ start_word $ end_word');'嘗試這個'$ output = passthru('python wordgame2.py' 。$ start_word。「」。$ end_word);'也許,python拒絕了由於$關鍵字引起的爭論(或者$可能調用了shell的變量重新應用) –

回答

9

更新 -

現在我知道的PHP,錯誤在於使用單引號'。在PHP中,單引號字符串被認爲是文字,PHP不會評估其中的內容。但是,雙引號"字符串會被評估,並且會按照您期望的那樣工作。這是在this SO answer精美總結。在我們的例子中,

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

會的工作,但下面不會 -

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

原來的答覆 -

我認爲錯誤在於

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

試試這個

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

難道顯而易見的解決方案是使用「而不是」嗎?不需要連接當「變量插值。 –

+0

嗯...我不太熟悉PHP(根本沒有),所以只有我的答案開始於*我認爲... * –

+1

此外,可能很好使用'escapeshellarg()'在連接時傳入的兩個參數。 – Terry

1

謝謝您的貢獻。我已經找到了我的問題,這個簡單的解決方法:

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

爲了中繼妥善處理PHP變量,它需要在執行前要連接到的字符串。

+2

而不是張貼你的答案,這是阿什什的答案,請接受他的答案。 – aIKid

+0

我在看到他的回答之前發佈了這個消息。請看時間戳。 – Micah

+0

事實上,我回答7秒鐘之前:) downvote是不必要的/未經證實。 –