Redirecionar assincronamente a saída std e errar a saída para o arquivo [duplicado]

1

Estou tentando redirecionar a saída de determinado programa com threads para determinado arquivo.

Eu tentei executar command > file 2&>1 , mas se command não parou de ser executado, file ainda estará vazio.

Existe alguma maneira de despejar de forma assíncrona a saída para file ?

Exemplo de fragmento de python:

import _thread

def run():
    raise ValueError('plah')

_thread.start_new_thread(run, ())
while True:
    pass

A execução de python program.py 2> log.txt não produz uma saída em log.txt até que o programa seja interrompido manualmente.

    
por Lezkus 12.09.2016 / 21:13

2 respostas

2

Faça a saída sem buffer . Uma maneira simples de fazer isso com o Python é definir PYTHONUNBUFFERED :

PYTHONUNBUFFERED=1 python program.py 2>log.txt
    
por 12.09.2016 / 21:26
1

Buffers do Python são exibidos por padrão. Dê o -u flag, ou coloque PYTHONUNBUFFERED=yes para evitar isso.

    
por 12.09.2016 / 21:25