Thonny运行Python代码遇AttributeError: 'module'无check_output属性
解决subprocess.check_output不存在的AttributeError问题
你的问题根源在于:你使用的Python版本是2.6,而subprocess.check_output是Python2.7才新增的方法,2.6版本的subprocess模块根本没有这个属性。更关键的是,你自己定义的check_output函数内部还在调用subprocess.check_output,这直接触发了报错。
下面是修正后的代码,完全基于Python2.6的subprocess.Popen实现多管道命令的输出获取:
import subprocess def check_output(cmd): """实现Python2.6下的多管道命令输出获取""" process_list = [] cmd_list = cmd.strip().split("|") for i, sub_cmd in enumerate(cmd_list): stdin_arg = None if i > 0: # 将前一个进程的stdout作为当前进程的stdin stdin_arg = process_list[i-1].stdout # 使用Popen创建子进程,不调用不存在的check_output proc = subprocess.Popen(sub_cmd.strip(), stdin=stdin_arg, stdout=subprocess.PIPE, shell=True) process_list.append(proc) if not process_list: return '' # 等待最后一个进程执行完成并获取输出 output, _ = process_list[-1].communicate() return output print(check_output('ls -la /var | grep log'))
修正说明:
- 移除了对
subprocess.check_output的调用,改用subprocess.Popen直接创建进程 - 逐个处理管道拆分后的命令,正确传递前后进程的输入输出流
- 通过最后一个进程的
communicate()方法获取最终输出,确保进程执行完成
内容的提问来源于stack exchange,提问作者Pratik Sawant
相关产品推荐
相关产品推荐

