Linux下Python subprocess报错No such file or directory问题求助
解决Linux下subprocess执行whereis conda报错的问题
报错原因
subprocess.check_output() 默认不通过shell执行命令,你传入的字符串 'whereis conda' 会被当作一个完整的命令名(而非whereis命令加conda参数),系统找不到名为“whereis conda”的命令,因此抛出FileNotFoundError。而os.system()默认在shell环境中执行命令,所以能正常运行。
快速修复方法
有两种方式可以解决这个问题:
- 拆分命令为参数列表:让subprocess正确识别命令和参数,无需依赖shell:
conda_path = subprocess.check_output(['whereis', 'conda']).decode("utf-8").strip() - 开启shell执行模式:设置
shell=True,让subprocess通过shell解析完整的命令字符串:
注意:如果命令包含不可信的用户输入,conda_path = subprocess.check_output('whereis conda', shell=True).decode("utf-8").strip()shell=True可能存在注入风险,这里是固定命令,无需担心。
更可靠的conda路径获取方式
其实不需要用whereis,直接调用conda自带的命令可以精准获取base环境的安装路径,避免whereis返回多个无关路径的问题:
conda_path = subprocess.check_output(['conda', 'info', '--base']).decode("utf-8").strip()
内容的提问来源于stack exchange,提问作者illan
相关产品推荐
相关产品推荐

