Python调用含空格路径的批处理文件无法识别的解决方法
解决Python运行带空格路径的批处理文件问题
嘿,这个坑我之前踩过!你遇到的问题本质是os.system()会把传入的字符串直接丢给系统命令行执行,而命令行默认会把空格当成命令/参数的分隔符——所以它才会只识别到Practice就停了,把后面的Folder当成了另一个参数。
给你两个靠谱的解决办法:
方法1:给路径套上双引号
既然命令行需要带空格的路径用引号包裹,那我们直接在传给os.system()的字符串里加上双引号就行:
import os practice_path = r"C:\Users\Username\Desktop\Practice Folder\Practice.bat" os.system(f'"{practice_path}"')
这里用f-string把路径整个包在双引号里,命令行就会把它当成一个完整的文件路径,不会被空格截断了。
方法2:用subprocess模块替代os.system(更推荐)
os.system()其实是比较老旧的方法了,Python官方更推荐用subprocess模块,它能更安全、灵活地处理外部命令,而且不需要手动加引号:
import subprocess practice_path = r"C:\Users\Username\Desktop\Practice Folder\Practice.bat" # 对于批处理文件,加上shell=True更稳妥 subprocess.run([practice_path], shell=True)
subprocess.run()接受参数列表时,会自动处理路径里的空格问题,不需要额外处理引号,还能方便地获取命令的执行结果、输出等信息,比os.system()好用多了。
另外补充一下:你之前用的原始字符串(r前缀)只是解决了Python解析路径时反斜杠的转义问题,但没法解决命令行层面的空格分隔问题,所以才会不管用~
内容的提问来源于stack exchange,提问作者J. D.




