subprocess 模块可以用于执行系统命令, 拿到执行的结果, 速度比较的快, 并且它允许你创建一个新的进程让其去执行另外的程序, 并与它进行通信,获取标准的输入、标准输出、标准错误以及返回码等
- 先来一个正确执行命令
import subprocess
res = subprocess.Popen(
"dir", # 在终端运行的命令
shell=True, # 新开一个终端
stdout=subprocess.PIPE, # 执行完命令, 将正确输出放到一个管道里
stderr=subprocess.PIPE, # 将错误输出放到一个管道里
)
result = res.stdout.read() # 拿到的是 bytes 格式的字符
result= str(result,encoding="gbk") # 在windows需要使用gbk编码,linux和mac上是"utf-8"
print(result)
执行正确结果如下
驱动器 F 中的卷是 本地磁盘
卷的序列号是 F2D8-4703
F:\python_16\day 36 的目录
2021/01/18 12:01 <DIR> .
2021/01/18 12:01 <DIR> ..
2021/01/18 11:55 718 client.py
2021/01/18 12:01 498 project.py
2021/01/18 11:20 1,147 sever.py
2021/01/18 10:16 154 struct模块应用.py
2021/01/18 10:16 573 客户端.py
2021/01/18 10:16 1,005 服务端.py
6 个文件 4,095 字节
2 个目录 344,722,980,864 可用字节
那如果你输入的命令不存在, stdout 改成 stderr
import subprocess
res = subprocess.Popen(
"aaa", # 在终端运行的命令
shell=True, # 新开一个终端
stdout=subprocess.PIPE, # 执行完命令, 将正确输出放到一个管道里
stderr=subprocess.PIPE, # 将错误输出放到一个管道里
)
result = res.stderr.read() # 拿到的是 bytes 格式的字符
result= str(result,encoding="gbk") # 在windows需要使用gbk编码
print(result)
执行错误结果如下:
'aaa' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
- 通过
|
管道符号可以实现将第一个命令的结果传递给第二个命令使用
import subprocess
res1 = subprocess.Popen(
"dir | findstr html*", # 使用管道符号运行命令
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
result = res1.stdout.read()
result= str(result,encoding="gbk")
print(result)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)