2011-02-20 34 views
1

我在我的web服務器上有一個很棒的Python程序,我想從我的PHP web應用程序中使用它。PHP + Python - 使用PHP將字符串傳遞給Python程序,並解析輸出

這裏的蟒蛇命令的例子,和輸出,你會看到它在終端:

>>> print MBSP.parse('I ate pizza with a fork.') 

I/PRP/I-NP/O/NP-SBJ-1/O/i 
ate/VBD/I-VP/O/VP-1/A1/eat 
pizza/NN/I-NP/O/NP-OBJ-1/O/pizza 
with/IN/I-PP/B-PNP/O/P1/with 
a/DT/I-NP/I-PNP/O/P1/a 
fork/NN/I-NP/I-PNP/O/P1/fork ././O/O/O/O/. 

你可能會認識到這是一個典型的POS惡搞。

無論如何,我很困惑如何使用基於PHP的web應用程序發送這個程序的字符串,如「我吃叉子比薩餅」,並以某種方式獲得響應的方式,可以是在PHP中進一步分析。

想法是使用PHP將此文本傳遞給Python程序,然後通過選擇某些類型的單詞來獲取由PHP解析的響應。

似乎在PHP中,通常的嫌疑人是popen()和proc_open(),但popen()僅用於發送或接收信息 - 不是兩個? popen()能夠讓我訪問我從Python程序中獲得的這個輸出(上圖)嗎?還是有更好的方法?捲曲怎麼樣?

下面是我在功能方面的所有選項在PHP中: http://us.php.net/manual/en/function.proc-open.php

我失去了這一點,所以感謝您的智慧睿智之言!

+0

耶 - 這就是我有挑戰!什麼更好 - Exec()或類似popen()或proc_open()? – Jamison

回答

2

爲此我使用exec()

exec($command, $output); 
print_r($output); 
1

你可以使用的popen(),以及輸入傳遞給你的Python腳本作爲命令行參數,然後從文件中讀取描述符POPEN輸出給你,或者proc_open()如果你想互動雙向與Python腳本一起。

proc_open手冊中的示例1:http://us.php.net/manual/en/function.proc-open.php給出了一個例子。

+0

我讀過popen()比proc_open()更快更容易使用,那是真的嗎? – Jamison

2

如果你想得到一個更重/發燒友......給你的python腳本一個http(或xmlrpc)前端,並用GET/POST調用它。雖然不值得所有這些機器!

+0

xmlrpc我認爲絕對是要走的路!檢查了這一點http://docs.python.org/library/simplexmlrpcserver.html它變得更容易,當你使用Python的Web開發框架... – neolaser

+0

我懷疑他們可能不想啓動一個Python Web服務器,考慮主要應用程序在PHP :) –

+0

是啊 - 這是一個很好的解決方案,但爲了簡單起見,我寧願專注於popen()或proc_open()或exec()?三種選擇對我來說太重要了 - 對於一個簡單的應用來說最適合? – Jamison

0

如果你的Python需要它作爲標準輸入,你可以嘗試popening的命令行:

echo "I ate pizza!"|my_python_progam.py 

,只是讀取輸出。像往常一樣,在將其發送到命令行之前進行適當的輸入驗證。

0

像這樣的工作

$command = '/usr/bin/python2.7 /home/a4337/Desktop/script.py' 
    $pid = popen('$command',r) 
     ........ 
     ........ 
     ......... 
     pclose($pid)