如何使用Python subprocess执行tree命令并输出正确结果?
解决Python调用tree命令报错的问题
错误原因
出现FileNotFoundError是因为subprocess.check_output默认不启用shell,此时你传入的整个字符串"tree /home/ubuntu/data"会被当作一个完整的命令名去查找,系统自然找不到这个文件。
解决方案
方案1:拆分命令为参数列表(推荐)
将命令和参数拆分成列表形式传递,这是更安全的方式,避免shell注入风险:
import subprocess cmd = ["tree", "/home/ubuntu/data"] # 捕获输出并指定编码为utf-8,直接得到字符串格式结果 returned_output = subprocess.check_output(cmd, encoding="utf-8") print(returned_output)
方案2:启用shell执行
如果需要保留完整的命令字符串,可以设置shell=True,让shell来解析命令:
import subprocess cmd = "tree /home/ubuntu/data" returned_output = subprocess.check_output(cmd, shell=True, encoding="utf-8") print(returned_output)
额外注意事项
- 如果运行时依然提示找不到
tree命令,需要先安装tree工具:- Debian/Ubuntu系系统执行:
sudo apt install tree - RHEL/CentOS系系统执行:
sudo yum install tree
- Debian/Ubuntu系系统执行:
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

