【问题标题】:How to call a Python Script from PHP?如何从 PHP 调用 Python 脚本?
【发布时间】:2017-07-17 22:10:37
【问题描述】:

我有一些用 PHP 编写的代码,但我也开发了一个用 Python 编写的脚本。是否可以从 PHP 代码中调用这个 Python 脚本?

如果是,我如何将参数从 PHP 传递给 Python 脚本?

我试图找到答案,但没有成功。

谁能给我一个线索?

【问题讨论】:

标签: php python


【解决方案1】:

你使用系统函数:http://php.net/manual/en/function.system.php

类似这样的:

$mystring = system('python myscript.py myargs', $retval);

【讨论】:

  • retvalmystring 中应该存在的内容。它们是相同还是不同,我假设retval 将包含控制台上的所有内容。您能否帮助理解这一点。
  • 混淆来自于 retval 的使用。文档对此也有错误,因为他们将此返回 var 命名为,然后也将其声明为 retval。但在上面的例子中 $retval 是执行状态,一个整数。 $mystring 是您刚刚运行的脚本的最后一行输出,一个字符串。希望能解决问题。
  • 可执行程序的返回码(此处为$retval)是一个整数。约定是,0 表示没有错误,其他任何内容都是特定于应用程序的错误代码。
【解决方案2】:

我设法为 PHP 制作了简单的函数 PY([parametress], code)。您几乎可以在 PHP 中包含 python 代码。 您也可以将一些简单的输入变量传递给 python 进程。您无法取回任何数据,但我相信这可以很容易地修复 :) 不适合在虚拟主机上使用(可能不安全,系统调用),我为 PHP-CLI 创建了它..

<?php

function PY()
{
 $p=func_get_args();
 $code=array_pop($p);
 if (count($p) % 2==1) return false;
 $precode='';
 for ($i=0;$i<count($p);$i+=2) $precode.=$p[$i]." = json.loads('".json_encode($p[$i+1])."')\n";
 $pyt=tempnam('/tmp','pyt');
 file_put_contents($pyt,"import json\n".$precode.$code);
 system("python {$pyt}");
 unlink($pyt);
}

//begin
echo "This is PHP code\n";
$r=array('hovinko','ruka',6);
$s=6;

PY('r',$r,'s',$s,<<<ENDPYTHON
print('This is python 3.4 code. Looks like included in PHP :)');
s=s+42
print(r,' : ',s)
ENDPYTHON
); 
echo "This is PHP code again\n";
?> 

【讨论】:

    【解决方案3】:

    你可以试试这个:

    python 脚本:

     test.py:
            打印“你好”
    

    然后是 php 脚本

    index.php:
       $i =`python test.py`;
       回声 $i;
    

    【讨论】:

      【解决方案4】:

      是的,您可以简单地使用 exec() 在 php 中调用 python 程序。我在这里包含的简单示例程序。

      $pyscript = 'G:\wamp\www\ll\test.py';
      $python = 'C:\\Python27\\python.exe';
      
      $cmd='$pyscript $python';
      
      exec("$cmd", $output);
      

      你应该指定你的python.exe路径和你的python文件路径。它必须在windows环境中需要。

      【讨论】:

        猜你喜欢
        • 2014-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-29
        • 1970-01-01
        • 2018-01-22
        • 2011-01-31
        • 2011-04-13
        相关资源
        最近更新 更多