方法一、使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256/512表示未找到,该方法适用于shell命令不需要输出内容的场景。

os.system(cmd)会启动子进程,在子进程中执行cmd,如果cmd有执行内容,会在标准输出显示。

举例说明:

1. 列举当前目录下的所有文件。

importos

val= os.system('ls -al')print val #输出为0

val = os.system('ls -al non_exist_folder')print val #输出为512

val = os.system('ls -al|grep non_exist_val')print val #输出为256

方法二、使用os.popen(),该方法以文件的形式返回shell指令运行后的结果,需要获取内容时可使用read()或readlines()方法。

os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容。实际使用时视需求情况而选择。

举栗:

importos

os.popen('ls -l')

输出:os.popen('ls -l').read() #返回字符串类型的结果

输出:'total 0\n-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 a.txt\n-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 b.txt\n'os.popen('ls -l').readlines() #返回一个list类型的结果

输出:['total 0\n', '-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 a.txt\n', '-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 b.txt\n']

val=os.popen('ls -al')for i inval.readlines():print i

方法三、使用commands模块,有三个方法可以使用:

(1)commands.getstatusoutput(cmd),其以元组(status,output)的形式返回命令执行后的返回状态和执行结果。其中,对cmd的执行实际上是按照{cmd;} 2>&1的方式,所以output中包含控制台输出信息或者错误信息,output中不包含尾部的换行符。

(2)commands.getoutput(cmd),返回cmd的输出结果。

(3)commands.getstatus(file),返回ls -l file的执行结果字符串,调用了getoutput,不建议使用此方法

importcommands

aa=commands.getstatusoutput('ls -l')

输出:(0,'total 0\n-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 a.txt\n-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 b.txt')#返回一个元组,对比os.popen(cmd)的返回结果,发现output中不包含尾部的换行符

bb=commands.getoutput('ls -l') #只返回执行结果

输出:'total 0\n-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 a.txt\n-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 b.txt'cc=commands.getstatus('a.txt') #查询某个文件的状态

输出:'-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 a.txt'dd=commands.getstatusoutput('ls -l non_exist_folder') #执行结果中包含控制台输出信息或者错误信息

输出:(512, "ls: cannot access 'non_exist_folder': No such file or directory")

os.popen(cmd)返回的是一个类文件对象,commands.getoutput(cmd)返回了字符串类型的输出结果,很多情况下用起来要更方便些。

方法四、subprocess模块,允许创建很多子进程,创建的时候能指定子进程和子进程的输入、输出、错误输出管道,执行后能获取输出结果和执行状态。

(1)subprocess.run():python3.5中新增的函数, 执行指定的命令, 等待命令执行完成后返回一个包含执行结果的CompletedProcess类的实例。

(2)subprocess.call():执行指定的命令, 返回命令执行状态, 功能类似os.system(cmd)。

(3)subprocess.check_call():python2.5中新增的函数, 执行指定的命令, 如果执行成功则返回状态码, 否则抛出异常。

说明:subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False, universal_newlines=False)

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)

subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)

args:表示shell指令,若以字符串形式给出shell指令,如"ls -l "则需要使shell = Ture。否则默认以数组形式表示shell变量,如"ls","-l"。

当使用比较复杂的shell语句时,可以先使用shlex模块的shlex.split()方法来帮助格式化命令,然后在传递给run()方法或Popen。

subprocess.run()、subprocess.call()、subprocess.check_call()、subprocess.check_output()都是通过对subprocess.Popen的封装来实现的高级函数,因此如果我们需要更复杂功能时,可以通过subprocess.Popen来完成

使用举栗:

importshleximportsubprocess

command='ls -l'args=shlex.split('ls -l')

bb=subprocess.Popen(args) #bb是一个Popen的对象,该对象不能通过read()或readlines()来读取

输出:total 0-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09a.txt-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09b.txt#在该处需要点击换行符才会结束

aa=subprocess.call('ls -l',shell=True)  #其返回值为shell命令的执行返回码

输出:total 0-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09a.txt-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09b.txt#直接返回

在Python3中的情况

期望:想要在Python3中执行curl命令并返回执行结果,返回结果时json体

分析:

cmd='curl -s "http://127.0.0.1:8080/xxxxx"'

1)使用os.system(cmd) 无法获取输出内容

2)使用os.popen(cmd).read()可以获取到返回的json体${aa},通过json.loads(${aa})可以将json体转为字典样式

3)commands模块在Python3.0中被废弃了

4)subprocess.getstatusoutput(cmd)输出结果类似于python2中的commands.getstatusoutput(cmd),返回一个元组,元组的第2个值是执行结果${aa},通过json.loads(${aa})可以将json体转为字典样式。

python执行linux命令返回结果_Python中调用Linux命令并获取返回值相关推荐

  1. 如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样)

    如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样) python标准库中的subprocess可以解决这个问题. from subprocess ...

  2. 安卓程序中调用 linux 命令

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 在研究串口 jni 开发的时候,遇到了这样一段代码: Process su;su = Runtime.getRuntim ...

  3. Python基础_第3章_Python中的循环结构

    Python基础_第3章_Python中的循环结构 文章目录 Python基础_第3章_Python中的循环结构 Python中的循环结构 一.回顾分支练习题 1.判断是否为一个合法三角形 2.求世界 ...

  4. Python基础_第5章_Python中的数据序列

    Python基础_第5章_Python中的数据序列 文章目录 Python基础_第5章_Python中的数据序列 Python中的数据序列 一.字典--Python中的==查询==神器 1.为什么需要 ...

  5. shell 调用matlab,在matlab中调用linux命令 以及后台运行matlab --zz

    由于matlab和linux命令各有所长:matlab比较擅长数值计算,linux命令比较擅长文件操作(matlab也基本上能够完成,但会稍微麻烦一点).所以在很多时候会需要将二者结合起来. 可能更多 ...

  6. linux mkfs 源码,Linux系统下移植busybox中mkfs.vfat命令

    为了延长磁盘寿命来存储音视频文件,打发在格式化磁盘过程中将簇的大小设置大点.因为存储的音视频文件现对较大,那么将簇大小设置得尽可能大,这样可以增强磁盘读取数据的性能,同时也不会浪费太多空间. 但发现我 ...

  7. Awk中调用shell命令

    Awk中调用shell命令 需求 在awk中,有时候需要调用linux系统中命令,如计算字符串的MD5值,并保存下来. 方法参考 call a shell command from inside aw ...

  8. 在Android项目中调用FFmpeg命令

    概述 FFmpeg,命令行非常强大.在PC机上,调用一行FFmpeg命令,就可以对视频文件进行剪切.合并.转码等功能.本文将介绍如何在Android中调用FFmpeg命令行. 编译 前面已经有两篇文章 ...

  9. python中执行linux命令(调用linux命令)_常见Python中调用Linux命令

    有时候我们需要从Python中执行Linux命令,下面就介绍几种方法? 1. os 模块: 1.1 os.system 函数: system方法会创建子进程运行外部程序,方法只返回外部程序的运行结果. ...

最新文章

  1. 面试官:你能聊聊高并发下的接口幂等性如何实现吗?
  2. 人机智能既不是人类智能,也不是人工智能
  3. 算法(Algorithms)第4版 练习 1.3.11
  4. 如何将OpenCV中的Mat类绑定为OpenGL中的纹理
  5. Lambda表达式和闭包Closure
  6. linux mysql复制一个表结构图_详解Windows和Linux下从数据库导出表结构,以及Linux下如何导入.sql文件到MySQL数据库...
  7. Linq to SQL 的增删改查操作
  8. 艾为数字ic面试题_秋招 应聘FPGA/数字IC笔试面试经验分享(简单列举FPGA/数字IC公司)...
  9. JSK-61 二进制加法【大数】
  10. OpenCV 图像编解码操作【imencode/imdecode】使用
  11. 【转】无线路由器密码破解
  12. windows共享 无法访问
  13. 使用蒲公英组网实现企业微信访问局域网数据
  14. 仿真器和模拟器的区别
  15. Origin绘制双Y轴图的方法
  16. 论文解读:A content-based recommender system for computer science publications
  17. 记一次线上报错{“exception“:“Illegal pattern component: XXX}
  18. 模板模式详解、模板模式怎么用、模板模式模板代码
  19. BitLocker恢复
  20. 汇编语言-中括号-mov指令-cmp指令-lea指令

热门文章

  1. debian 10 静态ip配置
  2. 【Sql Server】DateBase-结构化查询基础
  3. openpyxl.utils.exceptions.IllegalCharacterError错误
  4. 【机器学习】【条件随机场CRF-3】条件随机场的参数化形式详解 + 画出对应的状态路径图 + 给出对应的矩阵表示...
  5. MindArmour差分隐私
  6. 自然语言推理:微调BERT
  7. 自然语言推理和数据集
  8. TorchScript神经网络集成技术
  9. 机器视觉系统的几个问题解析
  10. Thrift的服务器和客户端Python案例