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

如何在Windows命令行打开Telegram?代码运行遇WinError32报错求助

解决Windows下Python启动Telegram时的WinError 32问题

首先,你的报错信息翻译为:

[WinError 32] 进程无法访问文件,因为该文件正在被另一个进程使用: 'C:\Users\likop\AppData\Local\Temp\tmp9t13ry7t'

这个错误并非来自Telegram的可执行文件,而是tts.va_speak生成的临时音频文件被占用,同时代码里的路径转义也存在潜在问题,以下是具体解决步骤:

1. 修复路径转义问题

Python字符串中的反斜杠\会被解析为转义字符(比如\U、\A会被识别为特殊序列),导致路径解析错误。你需要将路径改为原始字符串(在字符串前加r)或者使用双反斜杠:

# 原始字符串写法(推荐)
os.startfile(r'C:\Users\likop\AppData\Roaming\Telegram Desktop\Telegram.exe')

# 双反斜杠写法
os.startfile('C:\\Users\\likop\\AppData\\Roaming\\Telegram Desktop\\Telegram.exe')

2. 解决临时文件占用问题

报错的临时文件是tts.va_speak生成的音频文件,大概率是TTS还在占用这个文件时,代码就执行了os.startfile,导致文件锁定。你可以:

  • 添加短暂延迟,等待TTS完成并释放文件:
import time

elif cmd == 'open_Telegram':
    text = "Запускаю телеграм"
    tts.va_speak(text)
    # 等待1秒让TTS释放临时文件(可根据实际情况调整时长)
    time.sleep(1)
    os.startfile(r'C:\Users\likop\AppData\Roaming\Telegram Desktop\Telegram.exe')
  • 或者检查va_speak函数是否支持同步执行(即完成语音输出后再返回),如果有相关参数,开启同步模式。

3. 替代方案:用subprocess启动Telegram

如果os.startfile仍有问题,可以改用subprocess.Popen,它对进程启动的控制更灵活:

import subprocess

elif cmd == 'open_Telegram':
    text = "Запускаю телеграм"
    tts.va_speak(text)
    time.sleep(1)
    # 启动Telegram,重定向输出避免占用控制台
    subprocess.Popen(r'C:\Users\likop\AppData\Roaming\Telegram Desktop\Telegram.exe', 
                    stdout=subprocess.DEVNULL, 
                    stderr=subprocess.DEVNULL)

额外检查

如果Telegram已经在后台运行,重复启动可能引发异常。你可以用psutil库检查进程是否存在,若存在则激活窗口而非重新启动(需先安装psutil:pip install psutil):

import psutil
import subprocess

def is_telegram_running():
    for proc in psutil.process_iter(['name']):
        if proc.info['name'] == 'Telegram.exe':
            return True
    return False

elif cmd == 'open_Telegram':
    text = "Запускаю телеграм"
    tts.va_speak(text)
    time.sleep(1)
    if not is_telegram_running():
        subprocess.Popen(r'C:\Users\likop\AppData\Roaming\Telegram Desktop\Telegram.exe', 
                        stdout=subprocess.DEVNULL, 
                        stderr=subprocess.DEVNULL)
    else:
        # 若Telegram已运行,可调用Windows API实现窗口激活(需额外代码)
        pass

内容的提问来源于stack exchange,提问作者Likopik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:45:40