2011-10-05 16 views
7

Sono un principiante che utilizza Python e Pycurl per lo stress delle pagine Web a scopo di test. Tuttavia, pycurl continua a stampare il codice html restituito nel terminale, il che rende lo stress test ancora più lungo di quanto dovrebbe. Un codice pycurl che sto usando è pubblicato qui sotto. C'è un modo per eseguire semplicemente pycurl senza dover stampare o scrivere il risultato da nessuna parte? Qualsiasi assistenza sarebbe gradita.Pycurl continua a stampare nel terminale

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() 

risposta

19

La documentazione pycurl è terribile, ma credo che si desidera impostare WRITEFUNCTION ad una funzione che non fa nulla, per esempio

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

Inoltre, desidero dichiarare per la cronaca che ho pensato che "SET fa tutto" le API uscivano con VMS. Gaaah.

+0

Questo ha funzionato. Grazie: D – jyim89

+0

'La documentazione di Pycurl è terribile '- così vera – ddnomad

3

Potrebbe provare questo?

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

o solo una funzione che non fa nulla.

1

Non ho avuto fortuna con entrambi gli approcci elencati qui. Entrambi portano alla seguente errore:

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

Secondo la documentazione sia lambda x: None e devnull.write dovrebbero essere buone opzioni:

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

Tuttavia nel mio progetto ho dovuto effettuare le seguenti operazioni per risolvere questo problema:

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

In altre parole, non era facoltativo restituire il numero di byte scritti quando ho guardato. devnull.write restituisce effettivamente il numero di byte scritti, ma non l'ho esaminato. Forse c'è qualche problema con byte vs stringhe.

Si noti che sto usando Python 3. Sto indovinando questo non si applica a Python 2.

0

Per nascondere l'output, modificare il VERBOSE a 0:

p.setopt(pycurl.VERBOSE, 0)