2009-05-08 12 views
1

J'utilise pycurl pour télécharger un fichier via put et python cgi script pour recevoir le fichier côté serveur. Essentiellement, le code du côté serveur est:Python cgi et stdin

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

Cela semble fonctionner avec du texte, mais pas les fichiers binaires (je suis sous windows). Avec les fichiers binaires, la boucle faisant stdin.read se brise après avoir reçu quelque chose entre 10kb et 100kb. Des idées?

Répondre

3

Vous devez exécuter Python en mode binaire. Changer votre script CGI:

#!C:/Python25/python.exe 

ou quoi que ce dit:

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

Ou vous pouvez le faire par programme comme celui-ci:

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

avant de commencer à lire stdin.

+0

Cette dernière barre ne devrait-elle pas être une période? – unwind

+0

@unwind: Oops, bien repéré. Maintenant corrigé. – RichieHindle

+0

Je suis curieux ... pourquoi est-ce nécessaire? – ThiefMaster

0

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