2017-04-02 88 views
0

我無法讓php顯示我的python腳本的完整結果,只打印最後一個基本的打印語句。我在這裏做錯了什麼?爲什麼php不顯示python腳本的輸出?從python腳本返回PHP顯示

PHP

$result = exec('python list.py'); 
echo $result; 

list.py

import subprocess 

print "start" 

a = subprocess.Popen(["ls", "-a"], stdout=subprocess.PIPE) 
a.wait() 
result_str = a.stdout.read() 
print result_str 

print "stop" 

命令行輸出該Python腳本是如下

start 
...filename 
...filename 
...etc...etc 

stop 

從執行Python腳本輸出的PHP是唯一

停止

謝謝

回答

1

您需要將$result作爲參數傳入exec()否則您只會得到最後一條語句。

exec('python list.py', $result); 
print_r($result); 

這將讓輸出數組,$result[0]將包含stop$result[sizeof($result)-1]將包含stop之間的一切將包含你的程序輸出的其餘部分。

+0

這使用print_r($ result);顯示我開始和($結果[0])顯示我S,但($結果[-1])顯示我什麼都沒有。 print_r($ result [sizeof($ result)-1]);給我看S – Anthony

+0

@安東尼請重新閱讀我寫的東西。看起來你還在做'$ result = exec('python list.py');'而不是'exec('python list.py',$ result);' – Augwa

+0

這樣做是以書面形式執行的('python list。 py',$ result); print_r($ result [0]);並得到如上所述的結果 – Anthony

1

exec總是回報從命令的結果的最後一行。所以,如果你需要執行命令的每一行輸出。然後,你需要如下寫:

$result = exec('python list.py', $ouput); 
print_r($output) 

exec

文檔

string exec (string $command [, array &$output [, int &$return_var ]]) 

如果output參數存在,則指定數組將 充滿每一行來自命令的輸出。尾隨 空格(例如\ n)未包含在此數組中。請注意,如果 數組已包含某些元素,則exec()將追加到數組的末尾 。如果您不希望函數追加元素, 在將數組傳遞給exec()之前會調用unset()方法。