2009-05-08 10 views
1

Я использую pycurl для загрузки файла с помощью скрипта cgi и python cgi для получения файла на стороне сервера. По сути, код на стороне сервера:Python cgi и stdin

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

Это похоже на работу с текстом, но не бинарные файлы (я на окнах). С двоичными файлами цикл, делающий stdin.read, прерывается после получения чего-либо около 10 кб до 100 кб. Есть идеи?

ответ

3

Вам нужно запустить Python в двоичном режиме. Изменение CGI скрипт:

#!C:/Python25/python.exe 

или независимо от того, что говорит:

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

Или вы можете сделать это программно, как это:

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

, прежде чем начать читать stdin.

+0

Не должен ли этот последний косой период? – unwind

+0

@unwind: Ой, хорошо заметили. Теперь исправлено. – RichieHindle

+0

Мне любопытно .. зачем это нужно? – ThiefMaster

0

Использовать mod_wsgi вместо cgi. Он предоставит вам входной файл для правильно загруженной загрузки.