Python脚本不能从PHP调用

时间:2017-08-23 14:09:55

标签: php python shell

我正在尝试执行Python脚本作为对我的PHP代码的响应。这就是我的Python脚本的样子(用于测试目的):

#!/usr/bin/env python
# -*- coding: utf-8 -*-
print 'test'

import sys
sessionDir = sys.argv[1][:-14]
sys.stdout = open(sessionDir + 'output.txt','w')

print sessionDir

sys.stdout.close()

我的PHPCode如下所示:

global $calculationDir, $calculation, $userFilesDir;
//$pythonExe = '"D:\\WinPython-64bit-2.7.10.3\\WinPython Command Prompt.exe" python ';
//$pythonExe = 'abaqus python ';
$pythonExe = 'python ';
$scriptFile = '"'.$_SERVER['APPL_PHYSICAL_PATH'].substr($calculationDir,2).$calculation.'\\python\\test.py" ';
$dataFile = '"'.$userFilesDir.$_SESSION['user'].'\\'.$calculation.'\\'.$this->sessionID.'\\Parameters.dat"';
$command = escapeshellcmd($pythonExe.$scriptFile.$dataFile);

echo passthru('ipconfig').'<br>';

$output = passthru($command);
echo $output.'<br>';

passthru($command)不执行python脚本。如果我在命令控制台中手动输入它,命令行就可以正常工作。出于测试目的,我还打印我的ipconfig只是为了测试函数是否有效 - 它是什么。

正如您在我的代码中看到的,我有三种方法来调用python intepreter。首先是便携式python版本,第二个是abaqus python,第三个是python系统。这是棘手的部分。该脚本适用于abaqus python,但不适用于其他两个蟒蛇。

我还尝试了exec(), shell_exec(), system()而不是passthru(),它没有改变任何内容。用户还被授予对python脚本的完全访问权限。我错过了什么?你有什么想法我应该尝试看看python脚本是否被执行? (你需要我提供的信息是否缺乏?)

<小时/> 编辑:

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

2 个答案:

答案 0 :(得分:1)

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

由于您回复了HTML,我假设您正在从HTTP请求中运行此PHP代码。

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

看起来你在Windows上,使用反斜杠作为目录分隔符,我不知道如何在Windows上修复它。

答案 1 :(得分:0)

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

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