2011-08-12 2 views
4

Допустим, есть класс, как это:Выполнить питона из PHP

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

Этот класс, в питона, работает только тогда, когда вы присваиваете значение:

x = MyClass("Hi") 

Так в основном, на мой вопрос, является ли Я могу отправить переменную php для выполнения класса python и вернуть свой вывод (это строка) и продолжить выполнение моего php-кода?

Любые предложения?

РЕШЕНИЕ

в 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")

Теперь, используйте следующую строку, чтобы получить результат:

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

Я понимаю , но проблема в том, что переменная исходит из php. Как передать эту переменную из php в python? – Shaokan

+1

Честно говоря, я не очень хорошо знаю Python, но я уверен, что вы можете загружать аргументы CLI в Python ('argv'?). Вы можете выполнить его с PHP следующим образом: '... exec ('python yourscript.py' + $ yourVariable);' – elslooo

+0

в порядке да! в python sys.argv это то, что мне нужно увидеть переменные :) – Shaokan

0

Try с пакетом Python PECL:

Это расширение позволяет интерпретатор Python быть встроенный внутри PHP, позволяющий f или экземпляр и манипулирование объектами Python из PHP.

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

+0

Здесь есть более полная документация: http://www.indelible.org/php/python/guide.html – corretge

0

Мне удалось создать простую функцию PY() для PHP, которая позволяет практически вставлять код python в ваш PHP-скрипт. Вы можете передать также некоторые входные переменные в процесс 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"; 
?> 
0

Вы можете просто распечатать детали/переменные, которые вы хотите в файле python, которые будут буферизованы в переменную $ result в файле php и использовать echo $ result в php-файле для вывода результата из файла python ,

Вот питон модифицированный код:

#!/usr/bin/python 
import sys 
print sys.argv[1] + sys.argv[0] # this is the variable passed from php 
Смежные вопросы