我目前有一个我的网络服务器提供的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就像海报一样,我的脚本输出正确。
答案 0 :(得分:2)
获取shell输出的正确方法如下:
exec("python /var/www/html/query/myscript.py ".somequery."", $result);
var_dump($result); //output should be in here
试一试。