Наличие заявления на печать исчезает через определенный срок
Я хотел бы знать, можно ли ограничить количество времени, в течение которого оператор печати появляется в пользовательской консоли. У меня есть проект, который является Contact Manager, и он использовал файл CSV для хранения контактных данных. Программа предназначена для создания нового CSV-файла, даже если он не доступен в каталоге. Если я запустил программу без CSV-файла в каталоге, у меня на консоли отобразится сообщение, сообщающее пользователю, что создан новый файл. Я хотел бы, чтобы это сообщение отображалось только в течение примерно 10 секунд, а затем исчезало с консоли. Это возможно? Если так, я был бы признателен за некоторые предложения. Ниже приведен фрагмент кода, который проверяет наличие файла CSV, затем создает новый и уведомляет пользователя, если новый был создан.
def read_contacts():
try:
contacts = []
with open(FILENAME, newline="") as file:
reader = csv.reader(file)
for row in reader:
contacts.append(row)
return contacts
except FileNotFoundError:
print("Could not find " + FILENAME + " file!\n + "Starting new contacts file...\n")
На этом этапе код продолжает создавать новый файл CSV. Я хотел бы, чтобы предыдущий оператор печати исчез через 10 секунд, чтобы он не отображался в консоли все время работы программы.
4 ответа
Вы можете использовать возврат каретки ("\r"), чтобы вернуться к началу напечатанной строки, подождать 10 секунд, а затем заменить текст.
Пример:
import time
def read_contacts():
try:
contacts = []
with open(FILENAME, newline="") as file:
reader = csv.reader(file)
for row in reader:
contacts.append(row)
return contacts
except FileNotFoundError:
msg = "Could not find " + FILENAME + " file! Starting new contacts file..."
print(msg, end="\r")
time.sleep(10)
print(" " * len(msg), end="\r")
Самое простое решение - использоватьsys
модуль.
import sys
import time
FILENAME = "build_local.sh"
def disappear(msg: str, seconds: int = 3):
# Multiple lines cannot be flushed from screen without leaving empty gaps
msg = msg.replace('\n', '\t').strip()
sys.stdout.write(f"\r{msg}")
time.sleep(seconds)
sys.stdout.write("\r")
sys.stdout.flush()
# Don't use print after flush as it will make future messages print on top of previous
sys.stdout.write("\rTimed wait is done")
def read_contacts():
try:
contacts = []
with open(FILENAME, newline="") as file:
reader = csv.reader(file)
for row in reader:
contacts.append(row)
return contacts
except FileNotFoundError:
disappear(msg=f"Could not find {FILENAME} file!\nStarting new contacts file...")
if __name__ == '__main__':
read_contacts()
Другим альтернативным подходом может быть использование символа \033[F: (поскольку вы не хотите, чтобы задержка прерывала оставшийся скрипт, воспользуйтесь библиотекой потоков Python)
import sys
import time
import threading
def func():
time.sleep(10)
sys.stdout.write("\033[F")
def read_contacts():
try:
contacts = []
with open(FILENAME, newline="") as file:
reader = csv.reader(file)
for row in reader:
contacts.append(row)
return contacts
except FileNotFoundError:
errmsg="Could not find " + FILENAME + " file!\n + "Starting new contacts file...\n"
print(errmsg)
t = threading.Thread(target=func)
t.start()
#remaining code