我正在尝试执行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脚本的权限。
答案 0 :(得分:1)
这不是一个非常有用的答案,但我没有足够的代表发表评论。希望有人可以在此基础上提供并提供最终解决方案,但这至少会给你一点方向。
由于您回复了HTML,我假设您正在从HTTP请求中运行此PHP代码。
最有可能是您的PHP代码正在运行的用户(例如apache - 这取决于你的服务器配置)没有权限执行你的Python脚本。
看起来你在Windows上,使用反斜杠作为目录分隔符,我不知道如何在Windows上修复它。
答案 1 :(得分:0)
提供/计算可执行文件和文件的绝对完整路径。您的PHP进程可能无法在与Powershell或控制台相同的环境中运行。即:
$pythonExe = 'C:\\Python27\\python.exe'