python中shell执行知识点


Posted in Python onMay 06, 2020

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 相关文章推荐
pymssql ntext字段调用问题解决方法
Dec 17 Python
Python列表计数及插入实例
Dec 17 Python
Python获取邮件地址的方法
Jul 10 Python
浅谈Python实现Apriori算法介绍
Dec 20 Python
python的socket编程入门
Jan 29 Python
django限制匿名用户访问及重定向的方法实例
Feb 07 Python
详解python实现线程安全的单例模式
Mar 05 Python
详谈Numpy中数组重塑、合并与拆分方法
Apr 17 Python
django ajax发送post请求的两种方法
Jan 05 Python
Numpy一维线性插值函数的用法
Apr 22 Python
六种酷炫Python运行进度条效果的实现代码
Jul 17 Python
Python常用数据分析模块原理解析
Jul 20 Python
Python 通过监听端口实现唯一脚本运行方式
May 05 #Python
python2.7使用scapy发送syn实例
May 05 #Python
python 使用raw socket进行TCP SYN扫描实例
May 05 #Python
Python之变量类型和if判断方式
May 05 #Python
Python实现CAN报文转换工具教程
May 05 #Python
python TCP包注入方式
May 05 #Python
python构造IP报文实例
May 05 #Python
You might like
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
php md5下16位和32位的实现代码
2008/04/09 PHP
.htaccess文件保护实例讲解
2011/02/06 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
php如何把表单内容提交到数据库
2019/07/08 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
Javascript自定义排序 node运行 实例
2013/06/05 Javascript
Node.js中创建和管理外部进程详解
2014/08/16 Javascript
jQuery+css3实现转动的正方形效果(附demo源码下载)
2016/01/27 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
vue.js中created方法作用
2018/03/30 Javascript
video.js 实现视频只能后退不能快进的思路详解
2018/08/09 Javascript
jQuery 操作 HTML 元素和属性的方法
2018/11/12 jQuery
JavaScript实现的九种排序算法
2019/03/04 Javascript
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
python3.7 sys模块的具体使用
2019/07/22 Python
史上最详细的Python打包成exe文件教程
2021/01/17 Python
python解决OpenCV在读取显示图片的时候闪退的问题
2021/02/23 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
SQL注入攻击的种类有哪些
2013/12/30 面试题
可以使用抽象函数重写基类中的虚函数吗
2013/06/02 面试题
简短的公司员工自我评价分享
2013/11/13 职场文书
《小松树和大松树》教学反思
2014/02/20 职场文书
大学自主招生自荐信范文
2014/02/26 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
护士节策划方案
2014/05/19 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
2014年体育教师工作总结
2014/12/03 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
MySQL中order by的执行过程
2022/06/05 MySQL