2011-05-30 12 views
1

我建立在Django的應用程序,並希望運行我已經早些時候以.php腳本。我需要能夠給.php文件一個字符串並捕獲返回的輸出。有沒有人有一個想法如何做到這一點?我可以做出某種類型的http請求並獲得響應嗎?調用.PHP一個Django/Python的內提交

p.s.我已經嘗試過的PHP文件轉換爲Python腳本,但我無法得到它的工作..

+0

我懷疑,這是不可能的PHP腳本轉換到Python – GWW 2011-05-30 00:31:01

+1

沒有說這是不可能的,但我不能。所以我認爲只需調用php文件會更容易。 – Javaaaa 2011-05-30 00:36:13

回答

7

試試這個,我發現它here

import subprocess 

#simple caller, disguard output 

subprocess.call("php /path/to/my/old/script.php") 

# if you want output 

proc = subprocess.Popen("php /path/to/my/script.php", shell=True, 
stdout=subprocess.PIPE) 

script_response = proc.stdout.read() 
+0

謝謝,但我怎麼能夠用這種方法插入輸入?我必須輸入一個字符串,在php文件中捕獲它,然後在python腳本中再次捕獲輸出。任何想法? – Javaaaa 2011-05-30 13:41:54

+0

@Javaaaa'proc等於subprocess.Popen( 「PHP /path/to/my/script.php?myinput=whateverhere」,殼=真, 標準輸出= subprocess.PIPE)'你試過了嗎? – afarazit 2011-05-30 14:24:44

+0

我在Django中使用Popen,但得到的錯誤如下「Errno 2]沒有這樣的文件或目錄」異常位置:\t /usr/lib/python2.7/subprocess.py在_execute_child,行1259年 – Mohini 2015-05-05 10:49:12

0

如果是通過網絡提供服務的PHP文件服務器(我假設,從你的HTPP請求的問題)做這樣的事情:

In [1]: import urllib2 
In [2]: resp = urllib2.urlopen('http://www.starenka.net/ip') 
In [3]: resp.read() 
Out[3]: 'ip: 62.245.xx.xx\nlocal ip: 62.245.xx.xx\nhostname: ip-62-245-xx-xx.net.upcbroadband.cz\n' 
In [4]: resp.info() 
Out[4]: <httplib.HTTPMessage instance at 0x9f8720c> 
+0

謝謝,但如何我可以用這種方法插入一個輸入嗎?我必須輸入一個字符串,在php文件中捕獲它,然後在python腳本中再次捕獲輸出。任何想法? - Javaaaa 0秒前編輯 – Javaaaa 2011-05-30 13:42:01