Para operações de arquivo, o Python usa o buffer padrão do sistema operacional, a menos que você o configure de outra forma. Você pode especificar um tamanho de buffer, sem buffer ou com linha.
Por exemplo, a função aberta usa um argumento de tamanho do buffer.
http://docs.python.org/library/functions.html#open
"O argumento de buffer opcional especifica o tamanho do buffer desejado do arquivo:"
- 0 significa sem buffer,
- 1 significa linha em buffer,
- qualquer outro valor positivo significa usar um buffer (aproximadamente) desse tamanho.
- Um buffer negativo significa usar o padrão do sistema, que geralmente é buffer de linha para dispositivos tty e totalmente buffer para outros arquivos.
- Se omitido, o padrão do sistema é usado.
código:
bufsize = 0
f = open('file.txt', 'w', buffering=bufsize)
open('file.txt', 'w', 1)
eu recebo o buffer de linha adequado. Mas se eu fizer algo maior (eu queriaopen('file.txt', 'w', 512)
), ele armazena em buffer oio.DEFAULT_BUFFER_SIZE
8192. Isso é um bug do Python, do Linux ou do ID10t?stdout
receber um buffer de linha, independentemente de ser um console ou redirecionado para um arquivo?write()
um identificador de arquivo, a saída é armazenada em buffer na memória e acumulada até que o buffer esteja cheio ... quando o buffer é "liberado" (o conteúdo é gravado do buffer no arquivo). Você pode liberar explicitamente o buffer chamando oflush()
método em um identificador de arquivo.Você também pode forçar a liberação do buffer para um arquivo programaticamente com o
flush()
métodoEu achei isso útil ao seguir um arquivo de saída com
tail -f
.fonte
Note: flush() does not necessarily write the file’s data to disk. Use flush() followed by os.fsync() to ensure this behavior.
Note: flush() does not necessarily write the file’s data to disk. Use flush() followed by os.fsync() to ensure this behavior.
flushing
significa. Por que precisamos disso? Para que serve? por que eu deveria me importar com isso?Não sei se isso também se aplica ao python, mas acho que depende do sistema operacional que você está executando.
No Linux, por exemplo, a saída para o terminal libera o buffer em uma nova linha, enquanto que para a saída para arquivos, ele libera apenas quando o buffer está cheio (por padrão). Isso ocorre porque é mais eficiente liberar o buffer menos vezes e é menos provável que o usuário note se a saída não for liberada em uma nova linha de um arquivo.
Você pode liberar automaticamente a saída, se é isso que você precisa.
EDIT: Eu acho que você iria liberar automaticamente em python desta maneira (com base aqui )
fonte
Você também pode verificar o tamanho do buffer padrão chamando o atributo DEFAULT_BUFFER_SIZE somente leitura do módulo io.
fonte
Aqui está outra abordagem, até o OP para escolher qual ele prefere.
Ao incluir o código abaixo no
__init__
arquivo .py antes de qualquer outro código, as mensagens impressasprint
e os erros não serão mais registrados no Log.txt do Ableton, mas para separar os arquivos no seu disco:(para Mac, mude
#username#
para o nome da sua pasta de usuário. No Windows, o caminho para a pasta do usuário terá um formato diferente)Quando você abre os arquivos em um editor de texto que atualiza seu conteúdo quando o arquivo no disco é alterado (exemplo: Mac: o TextEdit não faz, mas o TextWrangler), você verá os logs sendo atualizados em tempo real.
Créditos: esse código foi copiado principalmente dos scripts da superfície de controle do liveAPI por Nathan Ramella
fonte