【问题标题】:Python script does not execute from PHP invocationPython 脚本不会从 PHP 调用中执行
【发布时间】:2017-08-23 14:09:55
【问题描述】:

我正在尝试执行 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 脚本。如果我在命令控制台中手动键入命令行,它就可以正常工作。出于测试目的,我还打印了我的 ipconfigjust 以测试该功能是否有效 - 它确实有效。

正如您在我的代码中看到的,我有三种方法来调用 python 解释器。第一个是可移植的python版本,第二个是abaqus python,第三个是python的系统路径。这是棘手的部分。该脚本确实适用于 abaqus python,但其他两个 python 均不适用。

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


编辑:

它在 IIS 7 Web 服务器上运行。 - 我通过 Windows File-Explorer 和 IIS-Programm(针对整个文件夹)更改了 python 脚本的权限。

【问题讨论】:

    标签: php python shell


    【解决方案1】:

    作为答案,这并不是很有帮助,但我没有足够的代表发表评论。希望有人可以在此基础上构建并提供最终解决方案,但这至少会给您一个方向。

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

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

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

    【讨论】:

    • 你是对的,根据你的所有假设。我尝试通过将文件安全性更改为所有访问权限来授予权限。这还不够吗? - 或者反过来问:这行得通吗?
    • 我没有足够的 Windows 经验来说明这是否可行或如何执行 :( 我可以告诉你,在 Linux 系统上我会 chmod 755 脚本来测试和看看它是否可行,应该大致相当于“所有访问”,但就像我说的,我对 Windows 管理的特性还不够熟悉,无法说
    • 我对文件安全属性做了一些研究并相应地进行了更改。一开始它并没有帮助,但是魔法重启机器(不仅是服务器)起到了作用。
    【解决方案2】:

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

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

    【讨论】:

    • 这不是我第一次尝试时所做的吗?:$pythonExe = '"D:\\WinPython-64bit-2.7.10.3\\WinPython Command Prompt.exe" python ';
    猜你喜欢
    • 2015-04-26
    • 2016-04-27
    • 2015-10-26
    • 1970-01-01
    • 2019-10-28
    • 2019-09-23
    • 2018-01-29
    • 1970-01-01
    相关资源
    最近更新 更多