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?
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