Comportamento de saída inesperado do console BPython

1

Estou usando o BPython para executar scripts em Python, e descobri que a saída do console tem um comportamento diferente do que o do Python normal. Por exemplo, este pequeno snippet:

import time
for i in range(100):
    time.sleep(.1)
    print("\r{}".format(i), end="")

saídas em Python:

99                                            |
>>>                                           |

mas saídas no BPython:

26                                            |
51                                            |
75                                            |
99                                            |
>>>                                           |
                                              ^ end of the console

Esses números aparentemente aleatórios dependem apenas do meu console width . Eu suspeito que o cursor BPython seja deslocado para a direita em cada chamada para print , mesmo que a cadeia comece com \r . Quando atinge a extremidade direita do console, a linha atual não pode mais ser apagada e, portanto, uma nova linha é iniciada.

Qualquer maneira de consertar isso?

UPDATE: (bug relatado )

    
por iago-lito 30.10.2015 / 15:22

1 resposta

1

Eu sugiro usar bpython-curses se você precisar desse comportamento, porque (como você notou) o front-end padrão do bpython não lida com isso corretamente. Você está aproximadamente correto em sua explicação: o bpython está registrando a saída para um sys.stdout falso e, em seguida, tentando adivinhar como processá-lo. Sua suposição é muito ingênua e, embora represente um número limitado de sequências de escape de formatação de terminal, ela não leva em conta retornos de carro. O cursor é movido para uma linha no terminal e essa linha calculada de saída é gravada, resultando no que você vê.

    
por 02.11.2015 / 15:34