Snowboy与Python:测试demo.py时Bash路径错误如何修正?
嘿,我之前也碰到过类似的问题,本质就是脚本运行时的工作目录和文件实际所在的目录不匹配,导致程序找不到目标文件。下面给你几个实用的解决办法,你可以根据自己的场景选择:
方法一:切换到文件所在目录再运行脚本
如果你的demo.py和snowboy.udml本来就在同一个文件夹里,最简单的方式就是先通过cd命令切换到这个目录,再执行脚本。比如假设这两个文件都在~/my-snowboy-files路径下:
cd ~/my-snowboy-files python demo.py
这样脚本运行时的工作目录就是文件所在的目录,自然能顺利找到snowboy.udml。
方法二:在Python脚本里使用绝对路径加载文件
如果你不想每次都切换目录,可以直接修改demo.py中加载文件的代码,把相对路径换成文件的绝对路径。比如原来的代码可能是这样:
detector = snowboydecoder.HotwordDetector("snowboy.udml", sensitivity=0.5)
你把它改成绝对路径(记得替换成你实际的文件路径):
detector = snowboydecoder.HotwordDetector("/home/your-name/my-snowboy-files/snowboy.udml", sensitivity=0.5)
这样不管你在哪个目录运行脚本,程序都能精准定位到文件。
方法三:运行脚本时传入文件的绝对路径参数
如果不想修改脚本代码,还可以给脚本加个路径参数,运行时直接传入snowboy.udml的绝对路径。首先修改demo.py让它支持接收参数:
import sys from snowboydecoder import HotwordDetector if __name__ == "__main__": # 如果传入了参数就用参数里的路径,否则用默认的相对路径 udml_file = sys.argv[1] if len(sys.argv) > 1 else "snowboy.udml" detector = HotwordDetector(udml_file, sensitivity=0.5) # 后续的业务代码...
然后运行脚本时直接带上绝对路径:
python demo.py /home/your-name/my-snowboy-files/snowboy.udml
方法四:用环境变量统一管理文件路径(适合多脚本共享场景)
如果有多个脚本都需要用到这个udml文件,可以把路径存到环境变量里,让脚本读取环境变量来定位文件。首先在Bash里设置临时环境变量:
export SNOWBOY_UDML="/home/your-name/my-snowboy-files/snowboy.udml"
然后修改demo.py读取这个环境变量:
import os from snowboydecoder import HotwordDetector # 读取环境变量,如果没找到就用默认的相对路径 udml_path = os.getenv("SNOWBOY_UDML", "snowboy.udml") detector = HotwordDetector(udml_path, sensitivity=0.5)
如果想让这个环境变量永久生效,可以把export那一行添加到~/.bashrc或者~/.bash_profile文件里,这样每次打开终端都会自动加载。
内容的提问来源于stack exchange,提问作者Mim Malein
相关产品推荐
相关产品推荐

