python中shell执行知识点

 更新时间:2020年05月06日 07:56:34   作者:呓语  
在本篇文章里小编给大家分享的是关于python中shell执行知识点内容,需要的朋友们可以学习下。

os.system

system方法会创建子进程运行外部程序,方法只返回外部程序的运行结果。这个方法比较适用于外部程序没有输出结果的情况。

import os
os.system('ls')

commands.getstatusoutput

使用commands模块的getoutput方法,这种方法同popend的区别在于popen返回的是一个文件句柄,而本方法将外部程序的输出结果当作字符串返回,很多情况下用起来要更方便些。
主要方法:

  • commands.getstatusoutput(cmd) 返回(status, output)
  • commands.getoutput(cmd) 只返回输出结果
  • commands.getstatus(file) 返回ls -ld file的执行结果字符串,调用了getoutput,不建议使用此方法

当需要得到外部程序的输出结果时,本方法非常有用。比如使用urllib调用Web API时,需要对得到的数据进行处理。os.popen(cmd) 要得到命令的输出内容,只需再调用下read()或readlines()等 如a=os.popen(cmd).read()

import os
ls = os.popen('ls')
print ls.read()

commands.getstatusoutput

使用commands模块的getoutput方法,这种方法同popend的区别在于popen返回的是一个文件句柄,而本方法将外部程序的输出结果当作字符串返回,很多情况下用起来要更方便些。
主要方法:

  • commands.getstatusoutput(cmd) 返回(status, output)
  • commands.getoutput(cmd) 只返回输出结果
  • commands.getstatus(file) 返回ls -ld file的执行结果字符串,调用了getoutput,不建议使用此方法
import commands
commands.getstatusoutput('ls -lt')   # 返回(status, output)

subprocess.call

根据Python官方文档说明,subprocess模块用于取代上面这些模块。有一个用Python实现的并行ssh工具—mssh,代码很简短,不过很有意思,它在线程中调用subprocess启动子进程来干活。

from subprocess import call
call(["ls", "-l"])
import shlex, subprocess
def shell_command(cmd, timeout) :
  data = {"rc":False, "timeout":False, "stdout":"", "stderr":""}
  try :
    process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    try:
      outs, errs = process.communicate(timeout=timeout)
      data["stdout"] = outs.decode("utf-8") 
      data["stderr"] = errs.decode("utf-8") 
      data["rc"] = True

    except subprocess.TimeoutExpired :
      process.kill()
      outs, errs = process.communicate()
      data["rc"] = False 
      data["stdout"] = outs.decode("utf-8") 
      data["stderr"] = "timeout"
      data["timeout"] = True 

  except Exception as e :
    data["rc"] = False 
    data["stderr"] = e 

  finally : 
    return data 

到此这篇关于python中shell执行知识点的文章就介绍到这了,更多相关python shell 执行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python验证多组数据之间有无显著差异

    python验证多组数据之间有无显著差异

    这篇文章主要介绍了python验证多组数据之间有无显著差异,利用方差分析和卡方分布验证多组数据之间的某些属性有无显著性差异,对于连续性属性可以用方差分析,对于离散型属性可以用卡方检验。下面文章详细内容需要的小伙伴可以参考一下
    2022-01-01
  • 在django中实现choices字段获取对应字段值

    在django中实现choices字段获取对应字段值

    这篇文章主要介绍了在django中实现choices字段获取对应字段值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Python实现带参数的用户验证功能装饰器示例

    Python实现带参数的用户验证功能装饰器示例

    这篇文章主要介绍了Python实现带参数的用户验证功能装饰器,结合实例形式分析了Python用户验证装饰器具体定义及使用技巧,需要的朋友可以参考下
    2018-12-12
  • 基于OpenCV的直方图匹配的实现方法

    基于OpenCV的直方图匹配的实现方法

    这篇文章主要介绍了基于OpenCV的直方图匹配的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Python 26进制计算实现方法

    Python 26进制计算实现方法

    这篇文章主要介绍了Python 26进制计算实现方法,涉及Python字符串与数值计算的相关操作技巧,需要的朋友可以参考下
    2015-05-05
  • Python删除指定字符之前或之后所有内容的方法

    Python删除指定字符之前或之后所有内容的方法

    本文主要介绍了Python删除指定字符之前或之后所有内容的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 详解Django中间件的5种自定义方法

    详解Django中间件的5种自定义方法

    这篇文章主要介绍了详解Django中间件的5种自定义方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • python区块链实现简版网络

    python区块链实现简版网络

    这篇文章主要为大家介绍了python区块链实现简版网络的详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • python Gabor滤波器讲解

    python Gabor滤波器讲解

    这篇文章主要介绍了python Gabor滤波器讲解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • 编写同时兼容Python2.x与Python3.x版本的代码的几个示例

    编写同时兼容Python2.x与Python3.x版本的代码的几个示例

    这篇文章主要介绍了编写同时兼容Python2.x与Python3.x版本的代码的几个示例,在Python2.7.x的更新中由于采用了某些Python3中的代码编写特性、使得在有些原本不同之处编写兼容性代码成为可能,需要的朋友可以参考下
    2015-03-03

最新评论