2012-04-15 73 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