2011-10-05 58 views
7

我是一名初學者,使用Python和Pycurl進行網頁壓力測試。然而,pycurl不斷地在終端中打印返回的html,這使得壓力測試花費的時間比它應該多。下面列出了一個我正在使用的pycurl代碼。有沒有辦法只是運行pycurl而不必在任何地方打印或寫入結果?任何援助都會變得不明智。Pycurl在終端中不斷打印

p = pycurl.Curl() 
p.setopt(pycurl.POST, 0) 
p.setopt(pycurl.COOKIE, sessioncookie) 
p.setopt(pycurl.URL, 'http://example.com/logoff.php') 
p.perform() 
p.close() 

回答

19

Pycurl文檔是可怕的,但我想你想設置WRITEFUNCTION爲一個什麼都不做的函數,

p.setopt(pycurl.WRITEFUNCTION, lambda x: None) 

此外,我希望陳述記錄,我認爲「SET可以做所有事情」API與VMS一起發佈。 Gaaah。

+0

這個工作。謝謝:D – jyim89

+0

'Pycurl文檔太糟糕了 - - 的確如此 – ddnomad

3

可以試試嗎?

devnull = open('/dev/null', 'w') 
p.setopt(pycurl.WRITEFUNCTION, devnull.write) 

或者只是一個什麼都不做的函數。

1

我對這裏列出的兩種方法都沒有任何運氣。無論導致以下錯誤:

pycurl.error: (23, 'Failed writing body (0 != 108)') 

根據文檔提供lambda x: Nonedevnull.write應該是不錯的選擇:

The WRITEFUNCTION callback may return the number of bytes written. If this number is not equal to the size of the byte string, this signifies an error and libcurl will abort the request. Returning None is an alternate way of indicating that the callback has consumed all of the string passed to it and, hence, succeeded.

http://pycurl.sourceforge.net/doc/callbacks.html#WRITEFUNCTION

但是在我的項目,我必須執行以下操作來解決此問題:

c.setopt(pycurl.WRITEFUNCTION, lambda bytes: len(bytes)) 

換句話說,當我查看時返回寫入的字節數是不可選的。 devnull.write實際上確實返回了寫入的字節數,但我沒有看到。字節與字符串可能存在一些問題。

請注意,我使用Python 3.我猜這並不適用於Python的2

0

要隱藏輸出中,詳細更改爲0:

p.setopt(pycurl.VERBOSE, 0)