Pergunta

Eu estou usando pycurl para carregar um arquivo via script de venda e cgi python para receber o arquivo no lado do servidor. Essencialmente, o código no lado do servidor é:

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

Isso parece funcionar com o texto, mas não os arquivos binários (eu estou no windows). Com arquivos binários, o loop fazendo pausas stdin.read depois de receber algo em torno de 10KB a 100KB. Alguma idéia?

Foi útil?

Solução

Você precisa executar Python no modo binário. Mude o seu script CGI de:

#!C:/Python25/python.exe

ou seja o que diz:

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

Ou você pode fazê-lo por meio de programação como esta:

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

Antes de começar a ler a partir de stdin.

Outras dicas

Use mod_wsgi vez de cgi. Ele irá lhe fornecer um arquivo de entrada para o upload que está correctamente aberta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top