【问题标题】:PHP calling python script and not returning resultPHP调用python脚本但不返回结果
【发布时间】:2021-06-05 11:51:31
【问题描述】:

我有一个简单的 PHP 脚本,它使用 shell_exec 调用 python 脚本,它应该返回结果“ok”

我似乎无法正常工作 - 没有通过 php 文件返回任何内容。我可以从 CLI 运行 python 脚本并且它可以工作,并且还可以运行 shell_exec 来运行其他函数并且可以工作。所以它是python特有的东西,我无法解决。

test.py:

 #!/usr/bin/python3

import sys

id = sys.argv[1:]
#Do some stuff wih id

#Return success
sys.exit("ok")

index.php

<?php

$command = escapeshellcmd('/root/bin/tracker/test.py');
$output = shell_exec($command);
echo $output;

//This works
//$output = shell_exec("cat /etc/os-release");
//echo $output;
?>

运行 /root/bin/tracker/test.py 返回:

好的

我尝试将 test.py 的所有权设置为 www:www-run 并检查了 +x 权限。

这是在 SLES 15.1 上运行的 PHP 7.2.5 阿帕奇 2.4.33

【问题讨论】:

  • 尝试添加 python 可执行文件的路径。比如:/path/to/python /root/bin/tracker/test.py.
  • 还是不走运。尝试添加: $output = shell_exec("/usr/bin/python3 /root/bin/tracker/test.py");
  • sys.exit("ok")表示错误,根据docsshell_exec在发生错误时返回null。使用sys.exit(0) 成功。
  • 感谢您的测试。看起来像一些权限问题,因为当我运行 php index.php 它可以工作,但不是来自浏览器

标签: python php


【解决方案1】:

发现问题。在 shell_exec 中添加 2>&1 可以清楚地显示错误。

$output = shell_exec("/usr/bin/python3 /root/bin/tracker/test.py 2>&1");

[Errno 13] 权限被拒绝

我将 test.py 文件从根文件夹移到 /srv/www/htdocs 中,现在它可以正常工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 2014-06-26
    • 2016-12-15
    • 2023-04-03
    相关资源
    最近更新 更多