How can I print multiple things on the same line, one at a time?
Как я могу напечатать несколько объектов в одной строке, по одному за раз?
Я хочу запустить скрипт, который в основном показывает вывод, подобный этому:
Installing XXX... [DONE]
В настоящее время я сначала печатаю Installing XXX..., а затем распечатываю [DONE].
Как я могу вместо этого напечатать Installing xxx... и [DONE] в одной строке?
Что касается конкретной проблемы написания нового сообщения в той же строке, заменяющего то, что было там раньше, пожалуйста, смотрите Как перезаписать предыдущую печать в стандартный вывод?. В большинстве ответов здесь вопрос интерпретировался как о написании нового текста в конце текущей строки.
print() Функция принимает end параметр, значение которого по умолчанию равно \n (новая строка). Установка для него пустой строки предотвращает выдачу новой строки в конце строки.
Установка запятой в конце print() строки предотвращает print() выдачу новой строки (следует отметить, что в конце вывода будет дополнительный пробел).
definstall_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
defbackspace(n): sys.stdout.write((b'\x08' * n).decode()) # use \x08 char to go back
for i inrange(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
defbackline(): print('\r', end='') # use '\r' to go back
for i inrange(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% в одной строке. Конечное значение будет:
Используйте sys.stdout.write('Installing XXX... ') и sys.stdout.write('Done'). Таким образом, вам придется вручную добавлять новую строку с помощью "\n", если вы хотите воссоздать функциональность печати. Я думаю, что, возможно, нет необходимости использовать curses только для этого.