Pregunta

Estoy usando pycurl para cargar un archivo mediante el script put y python cgi para recibir el archivo en el lado del servidor. Esencialmente, el código en el lado del servidor es:

while True:
   next = sys.stdin.read(4096)
   if not next:
       break
   #.... write the buffer

Esto parece funcionar con texto, pero no con archivos binarios (estoy en Windows). Con los archivos binarios, el bucle que realiza stdin.read se rompe después de recibir cualquier cosa entre 10 kb y 100 kb. ¿Alguna idea?

¿Fue útil?

Solución

Necesita ejecutar Python en modo binario. Cambie su script CGI de:

#!C:/Python25/python.exe

o lo que sea que diga:

#!C:/Python25/python.exe -u

O puede hacerlo programáticamente así:

msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)

antes de comenzar a leer desde stdin .

Otros consejos

Utilice mod_wsgi en lugar de cgi. Le proporcionará un archivo de entrada para la carga que se abrió correctamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top