python多线程输入字符和写入文件
用python实现:
C:\Users\wangrusheng\Downloads\pkd\zz.txt
使用了多线程,一个线程处理用户的控制台输入,另一个处理文件写入功能
功能 :
实时捕获用户输入内容
持久化存储到指定文本文件(追加模式)
支持即时退出指令exit,自动触发安全退出流程
自动创建目标文件目录(若不存在)
step1:C:\Users\wangrusheng\PycharmProjects\FastAPIProject1\hello.py
import threading
import queue
import osdef 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():breakcontinueexcept 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