2011-03-31 80 views
11

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

如果是的话,我怎样才能从PHP传递参数给Python脚本?

我试图找到一个没有任何成功的答案。

有人可以给我一个线索吗?

+0

是肯定,它应该有可能。但请大家给多一些细节。你是通过命令行还是通过网页运行 – 2011-03-31 09:13:22

+3

Duplicate - http://stackoverflow.com/questions/166944/calling-python-in-php? – 2011-03-31 09:15:47

回答

24

您使用的系统功能:http://php.net/manual/en/function.system.php

事情是这样的:

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

'retval'和'mystring'应该存在什么。它们是相同的还是不同的,我假定'retval'将包含控制台上的所有内容。你能帮助理解吗? – 2015-06-17 19:10:23

+0

混淆来自使用ret ** val **。这个文档也是错误的,因为他们命名这个return var,然后将它声明为retval。但在上面的例子中$ retval是执行状态,一个整数。而$ mystring是刚刚运行的脚本的输出的最后一行,即一个字符串。希望这能说明问题。 – Nalaurien 2017-06-06 00:17:07

+0

可执行程序的返回码(此处为'$ retval')是一个整数。约定是,'0'没有错误,其他任何东西都是特定于应用程序的错误代码。 – 2017-06-07 07:23:57

3

我设法让简单的功能PY([parametress]代码),PHP。您几乎可以将Python代码包含到您的PHP中。 您也可以将一些简单的输入变量传递给python进程。你不能得到任何数据传回,但我相信可以很容易地固定:)使用在虚拟主机不正常(potentionally不安全,系统调用),我创建它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"; 
?> 
0

是的,你可以只需使用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环境中使用。

1

你可以试试这个:

Python脚本:

 test.py: 
     print "hello" 

然后PHP脚本

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