2015-04-01 193 views
1

我一直在使用功能twill.commands.show()從頁面獲取原始HTML。我每5秒運行一次。每次運行該功能時,它都會使用提到的網頁原始HTML來監控控制檯。我需要使用控制檯進行調試,並且由於控制檯不斷地充滿HTML,這樣做是不可能的。由於show()被編程爲打印HTML並將其作爲字符串返回,所以我將不得不編輯斜紋,這是我的技能組以外的方式,並且使該程序在其他設備上不兼容。儘管反覆保存和讀取文件可能會奏效,但每5秒做一次似乎不切實際。使用顯示()與斜紋布用HTML控制檯控制檯

代碼:

go('http://google.com/') 
html=show() 

再次,斜紋具有save_html,這可以用來保存到一個文件,但我這樣做是每5秒,它可以減緩程序/計算機,尤其是如果它在一個較舊的操作系統上運行。

謝謝!

+0

你會如此友善地包含一些你已經試過的代碼,所以我們有一個我們可以嘗試和重現的例子嗎? – sircapsalot 2015-04-24 15:29:10

+0

@sircapsalot剛做過 – 2015-04-24 15:36:13

回答

2

Twill在默認情況下寫入stdout。您可以使用twill.set_output(fp)重定向其標準輸出。這裏是這樣做的幾種可能的實現:

寫入StringIO

from StringIO import StringIO 
sio = StringIO() 
twill.set_output(sio) 
html = show() # html+'\n' == sio.getvalue() 

/dev/null

import os 
null = open(os.devnull, 'w') 
twill.set_output(null) 
html = show() # writing to /dev/null or nul 
null.close() 

,或者什麼都沒有:

class DevNull(object): 
    def write(self, str): 
     pass 
twill.set_output(DevNull()) 
html = show() 

或任何其他可寫的文件類似你喜歡的python對象。

+1

謝謝! (我用過最後一個) – 2015-04-27 15:33:06

1

捕獲字符串中的輸出,並使用正則表達式替換所有使用空字符串的標記,以便獲取文本。

import re 
from StringIO import StringIO 

sio = StringIO() 
twill.set_output(sio) 
show() 
print(re.sub(r'<.*?>','',sio.getvalue(),flags=re.DOTALL)) 
+0

爲什麼需要更換標籤? – 2015-04-27 15:01:38

+0

你說'要得到文本',我以爲你只需要html中的文本。 – 2015-04-27 15:38:25

+0

對不起,我的意思是,我的意思是純HTML – 2015-04-28 14:53:23