2011-03-31 109 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;