2016-08-16 129 views
0

得到執行我有2個功能(recharge_list and sms_list)在我下面Server()功能不是在蟒蛇

import os 
import json 
import requests 
import cherrypy 
import ConfigParser 
from bs4 import BeautifulSoup 

class Server(): 

    @cherrypy.expose 
    def index(self): 

     return "Seems Like You're Lost :D" 


    @cherrypy.expose 
    def recharge_list(self,carrier, state): 
     details_array=[] 
     small_details_array=[] 
     price_cell_array=[] 
     lst = [] 
     url = "link{}/{}".format(carrier,state) 
     try: 
      if self.t_arr.get(url) is not None: 
       return json.dumps({'data': self.t_arr[url]}) 
     except AttributeError: 
      self.t_arr = {} 
     r = requests.get(url) 
     data = r.text 
     soup = BeautifulSoup(data,"html.parser") 
     table = soup.find('table',{'class':'table'}) 
     s="" 
     detailtext = table.findAll('div',{'class':'detailtext'}) 


     for det in detailtext: 
      details_array.append(det.text) 

     smalldetails = table.findAll('div',{'style':'padding-top:5px'}) 

     for smallDet in smalldetails: 
      small_details_array.append(smallDet.text); 


     price_cells = table.findAll('td', {'class': 'pricecell'}) 
     for price_cell in price_cells: 
      price_cell_array.append(price_cell.text) 

     for i in range(len(details_array)): 
      d_arr = {} 
      d_arr['detail']=details_array[i] 
      temp = small_details_array[i].split('\n') 
      d_arr['talktime'] = temp[1] 
      d_arr['keyword']=temp[3] 
      tempnew = price_cell_array[i].split('\n') 
      d_arr['price'] = tempnew[1] 
      d_arr['validity'] = tempnew[3] 
      # global list 
      lst.append(d_arr) 
     self.t_arr[url] = lst 
     return json.dumps({'data': self.t_arr[url]}) 

    @cherrypy.expose 
    def sms_list(self,carrier, state): 
     details_array=[] 
     price_cell_array=[] 
     lst = [] 
     url = "link/{}/{}".format(carrier,state) 
     try: 
      if self.t_arr.get(url) is not None: 
       return json.dumps({'data': self.t_arr[url]}) 
     except AttributeError: 
      self.t_arr = {} 
     r = requests.get(url) 
     data = r.text 
     soup = BeautifulSoup(data,"html.parser") 
     table = soup.find('div',{'id':'SMS'}) 
     table2 = table.find('table',{'class':'table'}) 
     print(table2) 
     s="" 
     detailtext = table2.findAll('div',{'class':'detailtext'}) 


     for det in detailtext: 
      details_array.append(det.text) 

     smalldetails = table2.findAll('div',{'style':'padding-top:5px'}) 


     price_cells = table.findAll('td', {'class': 'pricecell'}) 
     for price_cell in price_cells: 
      price_cell_array.append(price_cell.text) 

     for i in range(len(details_array)): 
      d_arr = {} 
      d_arr['detail']=details_array[i] 
      tempnew = price_cell_array[i].split('\n') 
      d_arr['price'] = tempnew[1] 
      d_arr['validity'] = tempnew[3] 
      # global list 
      lst.append(d_arr) 
     self.t_arr[url] = lst 
     return json.dumps({'data': self.t_arr[url]}) 

if __name__ == '__main__': 
    ''' Setting up the Server with Specified Configuration''' 

    cherrypy.config.update({'server.socket_host': '0.0.0.0',}) 
    cherrypy.config.update({'server.socket_port': int(os.environ.get('PORT', '5000')),}) 

cherrypy.quickstart(Server()) 

的問題是,當我跑我的服務器​​它的工作原理,但後來我不得不終止從終端我的服務器並重新啓動服務器以執行sms_list函數。

據我瞭解,曾經由Server創建的對象只能執行第一個被調用的函數。

我應該在我的代碼中編輯哪些內容,以便我可以在不終止服務器的情況下執行這些功能。

+0

你是什麼意思「*我運行我的服務器與'recharge_list' *」?準確地說,你採取了什麼行動,你觀察到了什麼結果? –

+0

我在firefox http:// localhost:5000/recharge_list/airtel/karnataka中調用url,其中http:// localhost:5000/recharge_list /是基礎url,airtel/karnataka是參數 – penta

+0

然後會發生什麼?這是否產生了預期的結果?它是否產生錯誤信息?你接下來訪問http:// localhost:5000/sms_list?是什麼讓你相信你必須終止你的服務器? –

回答

1

據我瞭解,一旦由Server創建的對象只能執行第一個被調用的函數。

事實並非如此。每次提供HTTP請求時,Web服務器都會調用與該請求的URL關聯的函數。

我應該在我的代碼中編輯哪些內容,以便我可以在不終止服務器的情況下執行這些功能。

sms_list(和在​​沒有),與t_sms_arr取代t_arr每個實例。

+0

我沒有t_url變量 – penta

+0

對不起,這是我的印刷錯誤。我的意思是'self.t_arr'。 –