2012-04-15 141 views
3

我試圖通過PHP執行POS標記的python腳本。 但它沒有返回完整的輸出。php exec缺少輸出

Python腳本:

import nltk 
import sys 

text = sys.argv[1] 

tokenize_into_words = nltk.word_tokenize(text) 

print text 

result = nltk.pos_tag(tokenize_into_words) 

print result 

print "Done!" 

PHP腳本

$cmd = 'python /Library/WebServer/Documents/varticle/vcmdpos.py ' . $string2; 

$tmp = exec($cmd,$output); 

print_r($output); 

命令:

蟒蛇/Library/WebServer/Documents/varticle/vcmdpos.py科學家

觀測的輸出:

陣列([0] =>科學家)

預期輸出繼電器:

陣列([0] =>科學家[1] =>「[( ''科學家','NNS')]「[2] =>」完成!「)

當我手動運行命令時,它運行5-10秒左右。 [這可能是由於執行POS標記或導入nltk所需的時間造成的。]

但是,當通過PHP運行時,它立即返回並從nltk.pos_tag或print語句輸出後返回。

我錯過了什麼嗎?

+0

$ tmp的價值是什麼,你確定$ string2被設置爲'科學家'?如果你在python腳本的頂部打印出什麼,會發生什麼? – 2012-04-15 08:05:12

+0

@ msgmash.com $ tmp不會打印任何內容。頂部即nltk.pos_tag之前的任何內容都將被打印。 – vaichidrewar 2012-04-15 09:09:07

+0

2>&1需要在命令中添加以獲得完整的輸出。 – vaichidrewar 2012-04-15 10:02:10

回答

3

2> &需要在命令中添加1才能獲得完整的輸出。 這解決了我的問題。

0

嘗試使用shell_exec - 或者,如果您想擁有更多控制權,請使用proc_open而不是exec()。

+0

我曾嘗試shell_exec但它給出了相同的結果 – vaichidrewar 2012-04-15 18:45:23