Вопрос-Ответ

How can I print multiple things on the same line, one at a time?

Как я могу напечатать несколько объектов в одной строке, по одному за раз?

Я хочу запустить скрипт, который в основном показывает вывод, подобный этому:

Installing XXX...               [DONE]

В настоящее время я сначала печатаю Installing XXX..., а затем распечатываю [DONE].

Как я могу вместо этого напечатать Installing xxx... и [DONE] в одной строке?


Что касается конкретной проблемы написания нового сообщения в той же строке, заменяющего то, что было там раньше, пожалуйста, смотрите Как перезаписать предыдущую печать в стандартный вывод?. В большинстве ответов здесь вопрос интерпретировался как о написании нового текста в конце текущей строки.

О проблеме использования single print для вывода нескольких объектов одновременно см. в разделе Как я могу напечатать несколько объектов (фиксированный текст и / или значения переменных) в одной строке, все сразу?.

Переведено автоматически
Ответ 1

Решение на Python 3

print() Функция принимает end параметр, значение которого по умолчанию равно \n (новая строка). Установка для него пустой строки предотвращает выдачу новой строки в конце строки.

def install_xxx():
print("Installing XXX... ", end="", flush=True)

install_xxx()
print("[DONE]")

Решение на Python 2

Установка запятой в конце print() строки предотвращает print() выдачу новой строки (следует отметить, что в конце вывода будет дополнительный пробел).

def install_xxx():
print "Installing XXX... ",

install_xxx()
print "[DONE]"
Ответ 2

Вы можете просто использовать это:

print 'something',
...
print ' else',

и на выходе будет

something else

не нужно перебирать import sys. Обратите внимание на символ запятой в конце.

Python 3+
print("some string", end=""); для удаления вставки новой строки в конце. Подробнее по ссылке help(print);

Ответ 3

You should use backspace '\r' or ('\x08') char to go back on previous position in console output

Python 2+:

import time
import sys

def backspace(n):
sys.stdout.write((b'\x08' * n).decode()) # use \x08 char to go back

for i in range(101): # for 0 to 100
s = str(i) + '%' # string for output
sys.stdout.write(s) # just print
sys.stdout.flush() # needed for flush when using \x08
backspace(len(s)) # back n chars
time.sleep(0.2) # sleep for 200ms

Python 3:

import time   

def backline():
print('\r', end='') # use '\r' to go back


for i in range(101): # for 0 to 100
s = str(i) + '%' # string for output
print(s, end='') # just print and flush
backline() # back to the beginning of line
time.sleep(0.2) # sleep for 200ms

Этот код будет иметь значение от 0% до 100% в одной строке. Конечное значение будет:

> python test.py
100%

Дополнительная информация о flush в данном случае здесь: Почему операторы python print, содержащие аргументы 'end =', ведут себя по-разному в циклах while?

Ответ 4

Используйте sys.stdout.write('Installing XXX... ') и sys.stdout.write('Done'). Таким образом, вам придется вручную добавлять новую строку с помощью "\n", если вы хотите воссоздать функциональность печати. Я думаю, что, возможно, нет необходимости использовать curses только для этого.

python