Python脚本不会从PHP调用执行

Python脚本不会从PHP调用执行,php,python,shell,Php,Python,Shell,我试图执行一个Python脚本作为对PHP代码的响应。这就是我的Python脚本的样子(当然,出于测试目的): #/usr/bin/env python #-*-编码:utf-8-*- 打印“测试” 导入系统 sessionDir=sys.argv[1][:-14] sys.stdout=open(sessionDir+'output.txt','w') 打印会话IR sys.stdout.close() 我的PHPCode如下所示: global$calculationDir,$calcu

我试图执行一个Python脚本作为对PHP代码的响应。这就是我的Python脚本的样子(当然,出于测试目的):

#/usr/bin/env python
#-*-编码:utf-8-*-
打印“测试”
导入系统
sessionDir=sys.argv[1][:-14]
sys.stdout=open(sessionDir+'output.txt','w')
打印会话IR
sys.stdout.close()
我的PHPCode如下所示:

global$calculationDir,$calculation,$userFilesDir;
//$pythonExe=''D:\\WinPython-64bit-2.7.10.3\\WinPython命令提示符.exe“python';
//$pythonExe='abaqus python';
$pythonExe='python';
$scriptFile=''''.$\u服务器['APPL\u物理路径'].substr($calculationDir,2)。$calculation'.\\python\\test.py';
$dataFile=''''''.$userFilesDir.$\u会话['user'].\\'.$calculation'.\\'.$this->sessionID'.\\Parameters.dat';
$command=escapeshellcmd($pythonExe.$scriptFile.$dataFile);
回音通过('ipconfig')。
; $output=passthru($command); 回显$output。“
”;
passthru($command)
不执行python脚本。如果我手动在命令控制台中键入命令行,它就可以正常工作。出于测试目的,我还打印了我的
ipconfig
,只是为了测试函数是否工作——它确实工作

正如您在我的代码中看到的,我有三种方法来调用python intepreter。第一个是可移植的python版本,第二个是abaqus python,第三个是python的systempath。这里是棘手的部分。该脚本可以与abaqus-python一起使用,但其他两种python都不能使用

我还尝试了
exec()、shell\u exec()、system()
而不是
passthru()
,这并没有改变任何事情。用户还被授予对python脚本的完全访问权限。我错过了什么?你有什么想法吗?如果python脚本被执行,我还应该尝试看什么?(是否缺少需要我提供的信息?)


编辑:


它运行在IIS 7 Web服务器上。-我通过Windows文件资源管理器和IIS程序(对于整个文件夹)更改了python脚本的权限。

提供/计算可执行文件和文件的绝对完整路径。您的PHP进程可能无法在与Powershell或控制台相同的环境下运行。i、 e:

$pythonExe = 'C:\\Python27\\python.exe'

这不是一个非常有用的答案,但我没有足够的代表发表评论。希望有人能在此基础上提供最终解决方案,但这至少会给你一点方向

因为您是在回显HTML,所以我假设您是从HTTP请求运行此PHP代码

最有可能的是您的PHP代码运行的用户(例如apache)- 这取决于您的服务器配置)没有执行Python脚本的权限


不过,从使用反斜杠作为目录分隔符来看,您似乎是在Windows上,我不知道如何在Windows上解决这个问题。

这不是我第一次尝试时所做的吗?:
$pythonExe='“D:\\WinPython-64bit-2.7.10.3\\WinPython命令提示符.exe“python”根据您的所有假设,您是对的。我尝试通过将文件安全性更改为“所有访问”来授予权限。这还不够吗或者反过来问:这行吗?我没有足够的Windows经验来说明这是否行得通或者如何做:(我可以告诉你,在Linux系统上,我会
chmod 755
测试脚本,看看它是否能工作,这大致相当于“所有访问”,但正如我所说,我对Windows管理的特性还不够熟悉,所以说我对文件安全属性做了一些研究,并根据需要进行了更改这在一开始并没有起到任何作用,但是神奇的重启机器(不仅仅是服务器)起到了作用。
$pythonExe = 'C:\\Python27\\python.exe'