Redirecionamento do stdout

Redirecionamento do stdout

por Christian Massao Tsujiguchi Takagi -
Número de respostas: 4

Olá. Estou com um problema e gostaria de saber se alguém tem uma idéia pra me ajudar.

Preciso testar uma função que é basicamente um show(), ou seja, uma coletânia de print()'s.
Para tanto, pensei em redirecionar o stdout da seguinte maneira:

sys.stdout = open('file', 'w')

Então, quando rodo uma função que imprime um texto com print(), o texto vai diretamente para o arquivo file.
Meu problema é que, depois de imprimir as informações, recebo um erro estranho:


AttributeError: '_io.TextIOWrapper' object has no attribute 'getvalue'


Minha dúvida é de onde vem esse erro, pois meu chute é que seja do unittest. Se for isso mesmo, como posso testar valores do stdout com o unittest, sem fazer essa "gambi"?

Em resposta à Christian Massao Tsujiguchi Takagi

Re: Redirecionamento do stdout

por Thiago Pereira Bueno -

Uma ideia simples seria refatorar o código separando a geração das strings q vc quer imprimir em um método helper e então testá-lo..e confiar que a operaçao de io para stdout funciona... 

Em resposta à Thiago Pereira Bueno

Re: Redirecionamento do stdout

por Christian Massao Tsujiguchi Takagi -

Não sei entendi bem. A idéia é gerar strings (as quais posso testar) em outro método e a rotina de impressão eu assumo que funcionam, pois são basicamente prints?