Python调用os.system启动记事本后脚本无法继续执行问题求解
问题根因
- 你当前代码无法正常运行的核心原因是
os.system()属于同步阻塞调用,必须等待被启动的记事本进程完全退出后才会返回执行后续代码,因此你写的模拟输入逻辑永远无法在记事本处于打开状态时触发。
可行解决方案
核心改动点
- 替换
os.system为subprocess.Popen:这是异步非阻塞的进程启动方法,启动记事本后会立即向下执行后续代码,不会等待进程退出 - 增加窗口等待时长:避免记事本还没完成启动就触发输入,导致输入内容丢失
- 修正代码中变量名误用
list的问题:list是Python内置类型关键字,作为自定义变量名会覆盖内置功能,属于不规范写法 - 模拟输入逻辑优化:直接使用
keyboard.write方法批量输入内容,无需逐个字符处理,代码更简洁
完整可运行代码
import subprocess import keyboard import time # 修正变量名,避免和内置关键字list冲突 code_list = [27, 1, 4, 21, 12, 20, 0, 19, 23, 9, 13, 29] word = "" for i in code_list: if i == 27: word += "[" elif i == 29: word += "]" elif i == 0: word += " " else: char = chr(ord('`') + i) word += char # 非阻塞启动记事本 subprocess.Popen("notepad.exe") # 等待窗口加载完成,可根据电脑性能调整时长 time.sleep(2) # 模拟输入,delay参数控制每个字符的输入间隔 keyboard.write(word, delay=0.2)
注意事项
- 运行脚本时建议使用管理员权限,否则
keyboard库可能没有系统级按键模拟权限,导致输入失败 - 如果经常出现输入落到其他窗口的问题,可以额外安装
pywin32库增加窗口激活逻辑,确保输入目标为刚启动的记事本:- 执行安装命令:
pip install pywin32 - 在
time.sleep(2)之后添加以下代码:
import win32gui import win32con # 查找记事本窗口句柄 hwnd = win32gui.FindWindow("Notepad", None) # 置顶并激活记事本窗口 win32gui.SetForegroundWindow(hwnd) win32gui.ShowWindow(hwnd, win32con.SW_SHOW) - 执行安装命令:
内容的提问来源于stack exchange,提问作者Alp Durak
相关产品推荐
相关产品推荐

