【问题标题】:php exec missing outputphp exec缺少输出
【发布时间】:2012-04-15 05:57:19
【问题描述】:

我正在尝试通过 PHP 执行用于 POS 标记的 python 脚本。 但它没有返回完整的输出。

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

命令:

python /Library/WebServer/Documents/varticle/vcmdpos.py 科学家

观察到的输出:

数组([0] => 科学家)

预期输出:

数组 ([0] => 科学家 [1] => "[('Scientists', 'NNS')]" [2] => "完成!")

当我手动运行命令时,运行大约需要 5-10 秒。 [这可能是由于进行 POS 标记或导入 nltk 所需的时间。]

但是当通过 PHP 运行时,它在没有返回后立即从 nltk.pos_tag 或 print 语句返回和输出。

我错过了什么吗?

【问题讨论】:

  • $tmp 的值是多少,您确定 $string2 设置为“科学家”吗?如果你在 python 脚本的顶部打印出一些东西会发生什么?
  • @msgmash.com $tmp 不打印任何内容。顶部的任何内容,即在打印 nltk.pos_tag 之前。
  • 2>需要在命令中加上&1才能得到完整的输出。
  • 您是在命令行还是通过浏览器运行 php 文件?另外,@vaicidrewar 的建议有帮助吗?

标签: php python exec nltk


【解决方案1】:

2>&1 需要在命令中添加才能获得完整的输出。 这解决了我的问题。

【讨论】:

    【解决方案2】:

    尝试使用shell_exec - 或者,如果您想拥有更多控制权,请使用 proc_open - 而不是 exec()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多