【发布时间】:2012-12-16 01:08:00
【问题描述】:
我目前有一个我的网络服务器提供的 php 页面。为了显示我需要在页面上显示的所有信息,我需要从外部 python 脚本输出。所以我一直在使用php的exec()命令来执行python脚本,并将输出捕获到一个字符串数组中,如下所示:
$somequery = $_GET['query'];
$result = exec("python /var/www/html/query/myscript.py ".somequery."");
//some for loop to loop through entries in result and echo them.
然而,从来没有任何要打印的条目,但是当我直接在服务器的控制台上运行命令时,它会正确输出。我尝试在我正在执行的网页上回显命令,这是正确的命令。我认为唯一可能是 exec() 不会在 php 程序完成之前停止其余部分的执行,导致循环我打印出发现 $result 为空的条目。
如何确保 exec() 在我的 php 脚本的其余部分之前完成执行? php.ini 中是否有我需要更改的设置?我不完全确定。
编辑:我尝试运行和存储 shell_exec("echo hello"); 的输出并打印该输出,它现在打印。但是,当运行我的命令需要几秒钟的时间时,程序在转到下一行之前永远不会完成执行它。
编辑 2:我在下面的帖子 https://stackoverflow.com/a/6769624 中找到了我的解决方案我的问题与我正在使用的 numpy python 包有关,我只需要注释掉 /usr/lib64/python2.7/ctypes/ 中的行init.py 像海报一样,我的脚本输出正确。
【问题讨论】:
-
这已经是asked
-
仅供参考,这完全不安全。任何人都可以运行您的 Web 服务器用户有权访问的任何内容。小心
exec()。 -
可能有人问过,但这些答案都没有回答我的问题。我也知道这不安全,但这不适用于生产环境……只是概念证明。
-
php exec 总是等待完成
-
我认为您需要使用 python 二进制文件的完整路径,例如
/usr/bin/python
标签: php