2009-05-08 3 views
1

Ich benutze pycurl, um eine Datei über Put und Python CGI-Skript, um die Datei auf der Serverseite zu erhalten. Im Wesentlichen ist der Code auf der Serverseite:Python cgi und stdin

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

Dies scheint mit Text zu arbeiten, aber nicht binäre Dateien (ich auf Windows-bin). Bei binären Dateien bricht die Schleife, die Stdin.read ausführt, nach dem Empfangen von irgendetwas um 10 KB bis 100 KB. Irgendwelche Ideen?

Antwort

3

Sie müssen Python im Binärmodus ausführen. Ändern Sie Ihr CGI-Skript aus:

#!C:/Python25/python.exe 

oder was auch immer es sagt:

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

Oder Sie können es tun programmatisch wie folgt aus:

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

vor von stdin zu lesen beginnen.

+0

Sollte nicht der letzte Schrägstrich eine Periode sein? – unwind

+0

@unwind: Oops, gut entdeckt. Jetzt behoben. – RichieHindle

+0

Ich bin neugierig .. warum ist das notwendig? – ThiefMaster

0

Verwenden Sie mod_wsgi anstelle von CGI. Sie erhalten eine Eingabedatei für den korrekt geöffneten Upload.