Pergunta

O documentação oficial para TemporaryFile lê-se:

Os padrões de parâmetro para o modo de 'w + b' para que o arquivo criado pode ser lido e escrito sem ser fechados .

No entanto, o abaixo código não funciona como esperado:

import tempfile

def play_with_fd():
    with tempfile.TemporaryFile() as f:
        f.write('test data\n')
        f.write('most test data\n')

        print 'READ:', f.read()

        f.write('further data')

        print 'READ:', f.read()

        f.write('even more')
        print 'READ:', f.read()

        print 'READ:', f.read()
        print 'READ:', f.read()

if __name__ == '__main__':
    play_with_fd()

A saída que eu vejo é:

> python play.py 
READ: 
READ: 
READ: 
READ: 
READ: 

Alguém pode explicar esse comportamento? Existe uma maneira de ler a partir de arquivos temporários em tudo? (Sem ter que usar o mkstemp de baixo nível que não iria apagar automaticamente os arquivos, e eu não me importo com arquivos chamados)

Foi útil?

Solução

Você deve colocar

f.seek(0)

antes de tentar ler o arquivo (isso vai mandar você para o início do arquivo) e

f.seek(0, 2)

para voltar ao fim para que você possa garantir que você não irá substituí-lo.

Outras dicas

read() não retorna nada, porque você está no final do arquivo. Você precisa chamar seek() antes read() retornará nada. Por exemplo, colocar esta linha em frente do primeiro read():

f.seek(-10, 1)

É claro que, antes de escrever novamente, certifique-se de seek() até o fim (se isso é onde você quer continuar a escrever a).

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