You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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库增加窗口激活逻辑,确保输入目标为刚启动的记事本:
    1. 执行安装命令:pip install pywin32
    2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 20:54:02