【问题标题】:PHP exec command runs python script but not python3PHP exec 命令运行 python 脚本但不运行 python3
【发布时间】:2016-11-30 01:27:21
【问题描述】:

我目前安装了 Python 2.7 作为 OSX 的一部分,最近安装了 3.5.2。

我正在使用 XAMPP 在我的 mac 上运行本地网络服务器,当我从 apache 中执行 python 脚本时,它可以正常加载:

$executePython = "python " . __DIR__ . "/cycle/cutoff.py $device_id $processPreviousMinutes";
exec("$executePython");

但是,当我将 python 替换为 python3 时,我的脚本拒绝运行。我可以使用这两个版本从命令行手动调用它,但是似乎 apache 帐户/守护进程无法访问 python3。这是否与我忽略的配置文件有关?

【问题讨论】:

  • 你能比较一下python和python3的权限/用户组并回答你自己的问题吗?
  • 检查 python2.7 和 python3.5 可执行文件的共享和权限显示它们完全相同。还有什么想法吗?
  • 我明白了,当您尝试从 php 运行“python3”时,您到底得到了什么?一定是一些错误信息等。
  • 我在$executePython 命令后面附加了>>/tmp/errorlog.log 2>&1 并在apache 以守护程序用户身份运行时收到了sh: python3: command not found。当我对/usr/local/bin/python3 的路径进行硬编码时,它会运行!但是,我只想指定python3,那么如何做到这一点?
  • 当我echo $PATH 我得到:/usr/local/bin /usr/bin /bin /usr/sbin /sbin /usr/local/git/bin 所以我自己的帐户可以从任何地方运行 python3,但 apache 守护程序帐户不能(但它可以运行 python)。

标签: php python apache python-3.x xampp


【解决方案1】:

我们不想在最新的 OSX 上弄乱系统范围的路径。如果你像这样在脚本中添加 python3 路径,然后做你正常的事情会怎样

putenv("PATH=/usr/local/bin/:" . exec('echo $PATH'));
$executePython = "python3 " . __DIR__ . "/cycle/cutoff.py $device_id $processPreviousMinutes";
exec("$executePython");

putenv 只是将您的 python3 路径添加到 XAMPP 的 apache 中的任何当前路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-25
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 2011-09-21
    相关资源
    最近更新 更多