繁体   English   中英

PHP exec无法执行Python脚本

[英]PHP exec cannot execute Python script

我在 Windows 11 中使用 PHP。我无法在 PHP exec 中执行 Python 脚本。

目前情况如下,可以执行不调用Python脚本的命令:

exec("cd E:/Python/WordFrequency && ipconfig", $output, $result_code);

exec("Python -V", $output, $result_code);

以上两行代码返回代码0。

但是,以下代码返回代码 1:

exec("Python E:/Python/Mnist/main.py", $output, $result_code);

直接在Windows PowerShell运行:

Python E:/Python/Mnist/main.py

没有问题。

但是,调用 PHP 返回代码 1。

请问有什么事吗?

经过努力,我前几天解决了这个问题。 现在,我把解决方案放在这里。

PHP无法调用Python文件的原因是在exec()中执行如下命令时:

Python E:/Python/Mnist/main.py

返回以下错误:RuntimeError:无法确定主目录。

进一步测试后发现:

import os
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

发现如果main.py只包含以上五行代码,PHP可以成功调用Python。 这意味着我的整个PHP和Python程序逻辑和操作系统权限都没有问题。

一旦我添加了另一行代码:

from matplotlib import pyplot as plt

PHP将无法成功调用Python,会提示“Could not determine home directory”的错误信息。 这意味着代码引入的错误来自 matplotlib import pyplot as plt.

一开始以为是matplotlib安装的路径或者权限有问题。 检查后没有问题。 经多方查询,才渐渐明白其中的缘由。 对于模块 matplotlib,它会要求确定用户的主目录。 因为通常只有操作系统的用户才会调用matplotlib模块,这是有意义的,不会造成麻烦。 但是,通过浏览器调用 Python 脚本的非特定访问者将不会拥有或确定用户的主目录。 因此,在这种情况下,matplotlib模块抛出无法确定用户主目录的错误是非常合理的。

如何解决 Could not determine home directory 的问题? 方法是在 from matplotlib import pyplot as plt 这行之前(或者直接在Python文件的开头)添加如下代码:

import os
os.environ['HOMEPATH'] = 'E:/Python/Mnist'

即手动指定通过浏览器访问Python脚本的未指定用户的家目录。 从而为matplotlib提供一个存放必要文件的地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM