用python实现:
C:\Users\wangrusheng\Downloads\pkd\zz.txt
使用了多线程,一个线程处理用户的控制台输入,另一个处理文件写入功能
功能 :
实时捕获用户输入内容
持久化存储到指定文本文件(追加模式)
支持即时退出指令exit,自动触发安全退出流程
自动创建目标文件目录(若不存在)
step1:C:\Users\wangrusheng\PycharmProjects\FastAPIProject1\hello.py
import threading
import queue
import os
def handle_input(input_queue, stop_event):
"""处理用户输入的线程函数"""
try:
while not stop_event.is_set():
# 获取用户输入
data = input("请输入内容(输入'exit'退出): ")
# 检查退出命令
if data.strip().lower() == 'exit':
stop_event.set()
print("正在保存数据并退出程序...")
break
# 将输入内容放入队列
input_queue.put(data)
except Exception as e:
print(f"输入线程发生错误: {e}")
stop_event.set()
def write_to_file(file_path, input_queue, stop_event):
"""处理文件写入的线程函数"""
try:
with open(file_path, 'a', encoding='utf-8') as f:
while True:
try:
# 获取队列内容(最多等待1秒)
data = input_queue.get(timeout=1)
f.write(f"{data}\n")
f.flush() # 立即写入磁盘
input_queue.task_done()
except queue.Empty:
# 检查是否应该退出
if stop_event.is_set():
break
continue
except Exception as e:
print(f"文件写入发生错误: {e}")
stop_event.set()
def main():
# 文件路径配置
file_path = r'C:\Users\wangrusheng\Downloads\pkd\zz.txt'
# 确保目录存在
os.makedirs(os.path.dirname(file_path), exist_ok=True)
# 创建线程间通信对象
input_queue = queue.Queue()
stop_event = threading.Event()
# 创建并启动线程
input_thread = threading.Thread(target=handle_input, args=(input_queue, stop_event))
write_thread = threading.Thread(target=write_to_file, args=(file_path, input_queue, stop_event))
input_thread.start()
write_thread.start()
# 等待线程结束
input_thread.join()
write_thread.join()
print("程序已安全退出")
if __name__ == "__main__":
main()
step2:运行结果
(.venv) PS C:\Users\wangrusheng\PycharmProjects\FastAPIProject1> python hello.py
请输入内容(输入'exit'退出): 测试
请输入内容(输入'exit'退出): hello
请输入内容(输入'exit'退出): world
请输入内容(输入'exit'退出): exit
正在保存数据并退出程序...
程序已安全退出
(.venv) PS C:\Users\wangrusheng\PycharmProjects\FastAPIProject1>
end
808

被折叠的 条评论
为什么被折叠?



