2011-08-12 64 views
4

说你有一个这样的类:从PHP执行Python

x = MyClass("Hi") 

所以基本上,我的问题是,是否:

class MyClass: 
    def __init__(self, var1): 
     self.var = var1 
    .... 

这个类,在Python中,当你分配一个值仅适用我可以从PHP发送一个变量来执行一个python类,并返回它的输出(它是字符串)并继续执行我的php代码?

有什么建议吗?

SOLUTION

在PHP

$var = "something"; 
$result = exec("python fileName.py .$var") 

在python:

import sys 

sys.argv[0] # this is the file name 
sys.argv[1] # this is the variable passed from php 
+0

[类似的问题] [1] [1]:http://stackoverflow.com/questions/166944/calling-python- in-php – Nitish

+0

我已经读过,在这个问题中,它不是在谈论传递变量...... – Shaokan

回答

7

首先,创建一个包含要执行,包括(或加载)类和x = MyClass("Hi")

现在,使用下面的行得到结果的Python的脚本文件:

$result = exec('python yourscript.py'); 
+0

我明白,但问题是,该变量来自PHP。我如何将这个变量从php传递给python? – Shaokan

+1

说实话,我并不是很了解Python,但我确信你可以在Python中加载CLI参数('argv'?)。你可以像这样从PHP执行它:'... exec('python yourscript.py'+ $ yourVariable);' – elslooo

+0

好吧是的!在python sys.argv是我需要看到的变量:) – Shaokan

0

尝试使用Python PECL包:

此扩展允许Python解释为嵌入在PHP内部,允许f或者从PHP内部实例化和操作Python对象。

http://pecl.php.net/package/python

+0

这里有更好的文档:http://www.indelible.org/php/python/guide.html – corretge

0

我设法为PHP做了简单的函数PY(),它允许你几乎将python代码包含到你的PHP脚本中。您也可以将一些输入变量传递给python进程。你不能得到任何数据,但我相信这可以很容易地修复:) 在webhosting(可能不安全,系统()调用)使用不正常,我创建它的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

你可以在python文件中打印你想要的细节/变量,这些细节/变量将被缓存到php文件中的$ result变量中,并在php文件中使用echo $ result从python文件打印结果。

这里是蟒修改后的代码:

#!/usr/bin/python 
import sys 
print sys.argv[1] + sys.argv[0] # this is the variable passed from php