从配置文件读取os.system参数执行USB设备重启命令时出现语法错误的技术咨询
解决USB设备重置命令从配置文件读取后执行失败的问题
你遇到的问题主要是配置文件格式错误,加上configparser的解析特性导致命令字符串被破坏了,咱们一步步拆解解决:
问题根源
- 配置文件误用Python语法:你在
config.txt里写了r'"devcon.exe restart "*USB\VID_04E8&PID_3321*"',其中r''是Python专属的原始字符串语法,配置文件根本不识别这个前缀,会被当成字符串的一部分读进去,直接打乱了命令格式。 - 转义字符被错误解析:
configparser默认会处理转义字符,配置文件里的\VID会被尝试解析为转义序列(哪怕\V不是有效转义,也会干扰设备ID的正确性)。 - 潜在的变量名拼写错误:你的代码里写了
usbddev = config.get(...),但重置函数里用的是usbdev——如果这不是笔误,会直接触发NameError,虽然你的错误提示没提到这个,但还是要留意。
解决方案
步骤1:修正配置文件内容
去掉Python的r前缀,同时正确处理反斜杠(用双反斜杠避免转义):
[My Section] usbdev = devcon.exe restart "*USB\\VID_04E8&PID_3321*"
如果devcon.exe的路径包含空格(比如在C:\Program Files目录下),需要给路径部分单独加引号:
[My Section] usbdev = "\"C:\\Program Files\\your-path\\devcon.exe\" restart \"*USB\\VID_04E8&PID_3321*\""
步骤2:调整Python读取逻辑
确保变量名拼写正确,也可以通过raw=True让configparser直接读取原始字符串(不处理转义):
import configparser import os config = configparser.ConfigParser() config.read('config.txt') # 修正变量名拼写,添加raw=True保留原始字符 usbdev = config.get('My Section', 'usbdev', raw=True) def resetactivity(): os.system(usbdev)
步骤3:验证命令有效性
先打印读取到的usbdev字符串,确认和你原来硬编码的命令一致:
print(usbdev) # 预期输出:devcon.exe restart "*USB\VID_04E8&PID_3321*"
如果输出正确,再执行重置函数就不会报错了。
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

