2011-10-05 14 views
7

Soy un principiante que usa Python y Pycurl para fines de pruebas de estrés de páginas web. Sin embargo, pycurl sigue imprimiendo html devuelto en el terminal, lo que hace que las pruebas de resistencia tomen incluso más tiempo de lo que deberían. Uno de esos códigos pycurl que estoy usando se publica a continuación. ¿Hay alguna manera de ejecutar pycurl sin tener que imprimir o escribir el resultado en ninguna parte? Cualquier asistencia sería apreciada.Pycurl sigue imprimiendo en la terminal

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

Respuesta

19

La documentación de Pycurl es terrible, pero creo que desea configurar WRITEFUNCTION a una función que no hace nada, p.

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

Además, deseo dejar constancia de que pensé que la API "SET hace todo" salió con VMS. Gaaah.

+0

Esto funcionó. Gracias: D – jyim89

+0

'La documentación Pycurl es terrible' - tan cierto – ddnomad

3

¿Podría intentarlo?

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

o simplemente una función que no hace nada.

1

No he tenido suerte con los dos enfoques enumerados aquí. Ambos conducen al error siguiente:

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

Según la documentación tanto lambda x: None y devnull.write deben ser buenas opciones:

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

Sin embargo, en mi proyecto que tenía que hacer lo siguiente para corregir este problema:

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

En otras palabras, no era opcional devolver la cantidad de bytes escritos cuando miré. devnull.write realmente devuelve la cantidad de bytes escritos, aunque no lo investigué. Posiblemente haya algún problema con los bytes frente a las cadenas.

Tenga en cuenta que estoy usando Python 3. Supongo que esto no se aplica a Python 2.

0

Para ocultar la salida, cambie la VERBOSE a 0:

p.setopt(pycurl.VERBOSE, 0)