Eu quero executar um script, que basicamente mostra uma saída como esta:
Installing XXX... [DONE]
Atualmente, imprimo Installing XXX...
primeiro e depois imprimo [DONE]
.
No entanto, agora eu quero imprimir Installing xxx...
e [DONE]
na mesma linha.
Alguma ideia?
python
printing
stdout
line-breaks
user697108
fonte
fonte
Respostas:
Você pode usar a
print
instrução para fazer isso sem importarsys
.A vírgula no final da
print
linha impedeprint
emissão de uma nova linha (observe que haverá um espaço extra no final da saída).A solução Python 3
Como as opções acima não funcionam no Python 3, você pode fazer isso (novamente, sem importar
sys
):A função de impressão aceita um
end
parâmetro com o padrão"\n"
. A configuração para uma sequência vazia impede que uma nova linha seja emitida no final da linha.fonte
print("...", end="", flush=True)
no Python 3, no Python 2 adicione umasys.stdout.flush()
chamada.print("Progress: {}%".format(var), end="\r", flush=True)
Você pode simplesmente usar isso:
e a saída será
não há necessidade de exagerar
import sys
. Preste atenção ao símbolo de vírgula no final.Python 3+
print("some string", end="");
para remover a inserção de nova linha no final. Leia mais porhelp(print);
fonte
print
função tem uma sintaxe ligeiramente diferente em python 2 VS 3.Você deve usar o backspace ' \ r ' ou (' \ x08 ') char para voltar à posição anterior na saída do console
Python 2+:
Python 3:
Este código contará de 0% a 100% em uma linha. O valor final será:
Informações adicionais sobre liberação neste caso aqui: Por que as instruções de impressão python que contêm argumentos 'end =' se comportam de maneira diferente nos loops while?
fonte
Use
sys.stdout.write('Installing XXX... ')
esys.stdout.write('Done')
. Dessa forma, você precisará adicionar a nova linha manualmente,"\n"
se desejar recriar a funcionalidade de impressão. Eu acho que pode ser desnecessário usar maldições apenas para isso.fonte
__future__
importações ou algo do tipo.Nenhuma das respostas funcionou para mim, pois todas elas pararam até que uma nova linha foi encontrada. Eu escrevi um ajudante simples:
Para testá-lo:
"olá" será impresso primeiro e nivelado na tela antes do sono. Depois disso, você pode usar a impressão padrão.
fonte
sys.stdout.write
imprimirá sem carro de retornohttp://en.wikibooks.org/wiki/Python_Programming/Input_and_output#printing_without_commas_or_newlines
fonte
Mais simples:
Python 3
Isso significa que o cursor voltará ao início, imprimirá algo e terminará na mesma linha. Se em um loop, ele começará a imprimir no mesmo local em que inicia.
fonte
print(’something to be override’, end=‘\r’)
é mais simples, no entanto.Este exemplo simples imprimirá de 1 a 10 na mesma linha.
fonte
A impressão tem um
end
argumento opcional , é o que foi impresso no final. O padrão é uma nova linha, mas você pode alterá-la para uma string vazia. por exemploprint("hello world!", end="")
fonte
print 'something',
. A vírgula no final impede a adição de uma nova linha.Se você deseja sobrescrever a linha anterior (em vez de adicioná-la continuamente), você pode combinar
\r
comprint(),
no final da declaração de impressão. Por exemplo,contará de 0 a 9, substituindo o número antigo no console. o
"...DONE!"
imprimirá na mesma linha que o último contador, 9.No seu caso para o OP, isso permitiria que o console exibisse uma porcentagem concluída da instalação como uma "barra de progresso", onde você pode definir uma posição inicial e final dos caracteres e atualizar os marcadores no meio.
fonte
Aqui está uma versão compatível com 2.7 derivada da versão 3.0 por @ Vadim-Zin4uk:
Python 2
Por esse motivo, a solução 3.0 fornecida parece um pouco inchada. Por exemplo, o método backspace não utiliza o argumento inteiro e provavelmente poderia ser eliminado por completo.
Python 3
Ambos foram testados e funcionam.
fonte
Este é um tópico muito antigo, mas aqui está uma resposta muito detalhada e um código de exemplo.
\r
é a representação de sequência de retorno de carro do conjunto de caracteres ASCII. É o mesmo que octal015
[chr(0o15)
] ou hexidecimal0d
[chr(0x0d)
] ou decimal13
[chr(13)
]. Vejaman ascii
para uma leitura chata. É (\r
) uma representação bastante portátil e é fácil o suficiente para as pessoas lerem. Simplesmente significa mover o carro na máquina de escrever de volta ao início sem avançar o papel. É aCR
parteCRLF
que significa retorno de carro e avanço de linha .print()
é uma função no Python 3. No Python 2 (qualquer versão que você esteja interessado em usar),print
pode ser forçado a entrar em uma função importando sua definição do__future__
módulo. O benefício daprint
função é que você pode especificar o que imprimir no final, substituindo o comportamento padrão de\n
imprimir uma nova linha no final de cadaprint()
chamada.sys.stdout.flush
diz ao Python para liberar a saída da saída padrão , que é onde você envia a saída, aprint()
menos que você especifique o contrário. Você também pode obter o mesmo comportamento executandopython -u
ou definindo a variável de ambientePYTHONUNBUFFERED=1
, ignorando as chamadasimport sys
esys.stdout.flush()
. A quantia que você ganha fazendo isso é quase exatamente zero e não é muito fácil de depurar se você esquecer convenientemente que precisa fazer essa etapa antes que seu aplicativo se comporte corretamente.E uma amostra. Observe que isso funciona perfeitamente no Python 2 ou 3.
fonte
print () possui um parâmetro interno "end" definido por padrão como "\ n" Chamar print ("This is America") está chamando print ("This is America", end = "\ n"). Uma maneira fácil de fazer é ligar para print ("This is America", end = "")
fonte
Caso você tenha pré-armazenado os valores em uma matriz, você pode chamá-los no seguinte formato:
fonte
Python acrescenta nova linha como um fim para imprimir. Use end = '' para python3 para o método print para acrescentar um espaço em vez de uma nova linha. para python2 use vírgula no final da declaração de impressão.
fonte
Encontrei este post do Quora , com este exemplo que funcionou para mim (python 3), mais próximo do que eu precisava (ou seja, apagando toda a linha anterior).
O exemplo que eles fornecem:
Para imprimir na mesma linha, como outros sugeriram, basta usar
end=""
fonte
Encontrei esta solução e está funcionando no Python 2.7
fonte
print
é uma sintaxe incorreta para o Python 2.7 e o código não funciona mesmo com a sintaxe correta.