Question

J'utilise pycurl pour télécharger un fichier via un script put et python cgi afin de recevoir le fichier côté serveur. Le code côté serveur est essentiellement le suivant:

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

Cela semble fonctionner avec du texte, mais pas avec des fichiers binaires (je suis sous Windows). Avec les fichiers binaires, la boucle exécutant stdin.read est interrompue après avoir reçu quelque chose entre 10 et 100 Ko. Des idées?

Était-ce utile?

La solution

Vous devez exécuter Python en mode binaire. Modifiez votre script CGI à partir de:

#!C:/Python25/python.exe

ou ce qu'il dit:

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

Ou vous pouvez le faire par programme comme ceci:

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

avant de commencer à lire à partir de stdin .

Autres conseils

Utilisez mod_wsgi au lieu de cgi. Il vous fournira un fichier d’entrée pour le téléchargement correctement ouvert.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top