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 /")      ## 获得输出,还有返回状态


posted @   moon~light  阅读(600)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示