1

我想知道是否可以限制打印语句出现在用户控制台中的时间。我有一个项目是联系人管理器,它使用 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

3 回答 3

1

您可以使用回车(“\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")
于 2018-10-24T15:02:13.273 回答
0

如果您不在 Windows 上,则可以查看curses。还有一个用于 windows 的端口,称为unicurses

于 2018-10-24T14:59:18.010 回答
0

另一种替代方法可以使用\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
于 2018-10-24T15:13:25.710 回答