2014-04-21 22 views
1

我從我的PHP代碼運行兩個Python腳本。要發送的值給腳本我做:從PHP發送/接收字符串到Python

$output1 = shell_exec('python /path/to/my/script1.py '.$name); 
$output1 = explode(',', $output1); 

,然後我做:

$output2 = shell_exec('python /path/to/my/script2.py '.$output1[0]); 
$output2 = explode(',', $output2); 

$output1接收來自python腳本回歸正常,但script2.py是我返回錯誤的值。直接在script2.py上手動設置$output1[0]的值給了我一個正確的值,所以問題不在腳本中。

我已經做了echo var_dump($output1);,它給了我一個正確的$output1[0],所以這個問題既不是來自$output1的價值。

任何線索?

編輯1:$output1[0]的值是一個帶有空格的字符串(「綠色的一天」)。

Edit2:好像只是傳遞了「綠色」一詞。當我傳遞一個有空格的字符串時,只傳遞第一個字。這是沒有意義的,因爲我爆炸了','當我回應$output1它顯示了包含空白的正確字符串。

回答

1

我設法解決了這個問題,所以我會在這裏回答,以防有人遇到同樣的問題。

功能shell_exec是這樣的:

$var = shell_exec('python path/to/your/python/script.py '.$var1.' '.$var2. ...); 

你想要的參數傳遞給你的Python腳本必須用空格分隔,這就是蟒蛇如何解釋您發送的多變量。

字符串「綠日」之內具有白色的空間,所以它像發送

$var = shell_exec('python path/to/your/python/script.py Green Day'); 

所以,當我在Python做sys.argv[1],它將獲得唯一的「綠色」事業「日」將是「第二」參數。

所以只是遍歷在Python的sys.argv並連接這樣的字符串:

string = '' 
for word in sys.argv[1:]: 
    string += word + ' ' 
+0

您是否嘗試過引用您的參數? ''Green Day''(repr:''「Green Day」'') –

+0

我沒有發送「原始字符串」,該字符串包含在$ var1中。我給出的解決方案很好。 –

+0

如果有的時候,你想解析更復雜的參數(甚至有引號的參數),請閱讀[本文](http://blogs.msdn.com/b/twistylittlepassagesallalike/archive/2011/04/23/everyone-quotes -arguments-the-wrong-way.aspx?Redirected = true) –