Python 执行 Shell 命令
system
import os
status = os.system("ls -l")
os.system 创建子进程在系统上执行命令,只能获取命令的返回状态,命令的输出结果会直接打到 console 上
比如 status = os.system("ls -l")
如果执行成功 status 的值就是 0,但是 list 的内容是直接打到 console 而无法取到值
popen
import os
f = os.popen("ls -l")
f.read() ## 返回所有输出
f.readline() ## 返回输出的下一行
f.readlines() ## 返回输出的剩下的所有行
popen 无法得到命令的返回状态,只能获取命令的输出
subprocess.Popen
os.popen 实际是对 subprocess.Popen 的封装,可以直接使用 subprocess.Popen
import subprocess
f = subprocess.Popen("ls -l",
shell=True,
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True)
f.stdout.read()
f.stdout.readline()
f.stdout.readlines()
f = subprocess.Popen("python", shell=True,
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True)
f.stdin.write("print(\"test\")") ## 可以和命令进行交互
f.stdin.close()
f.stdout.read()
subprocess 在 python2 和 python3 提供的函数有区别,但 Popen 的功能是一样的
commands
只用在 python2,在 python3 会被 subprocess 替代
import commands
commands.getoutput("ls -l") ## 只获得输出
commands.getstatusoutput("ls -l") ## 获得输出,还有返回状态
有 getstatus 命令,但似乎用不了,并不是获取返回状态
subprocess
python3 的 subprocess 添加了一些函数,用以取代 commands
import subprocess
subprocess.getoutput("ls -l") ## 获得输出
subprocess.getstatusoutput("ls /") ## 获得输出,还有返回状态
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界