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 相关文章推荐
在Python中用has_key()方法查找键是否存在的教程
May 21 Python
Python实现将xml导入至excel
Nov 20 Python
Python中matplotlib中文乱码解决办法
May 12 Python
python简单线程和协程学习心得(分享)
Jun 14 Python
Python Numpy 数组的初始化和基本操作
Mar 13 Python
python3下实现搜狗AI API的代码示例
Apr 10 Python
python批量下载网站马拉松照片的完整步骤
Dec 05 Python
利用python numpy+matplotlib绘制股票k线图的方法
Jun 26 Python
对numpy下的轴交换transpose和swapaxes的示例解读
Jun 26 Python
python实现飞机大战小游戏
Nov 08 Python
python实现连连看游戏
Feb 14 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 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
浅析Mysql 数据回滚错误的解决方法
2013/08/05 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
redis+php实现微博(二)发布与关注功能详解
2019/09/23 PHP
基于Laravel 多个中间件的执行顺序详解
2019/10/21 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
JavaScript 拖拉缩放效果
2008/12/10 Javascript
延时加载JavaScript代码提高速度
2015/12/27 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
2016/12/13 Javascript
AngularJS中run方法的巧妙运用
2017/01/04 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
大转盘抽奖小程序版 转盘抽奖网页版
2020/04/16 Javascript
vue 导出文件,携带请求头token操作
2020/09/10 Javascript
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
python 打印对象的所有属性值的方法
2016/09/11 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
python re模块的高级用法详解
2018/06/06 Python
对PyQt5中树结构的实现方法详解
2019/06/17 Python
Flask框架钩子函数功能与用法分析
2019/08/02 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
2020/04/09 Python
IE下实现类似CSS3 text-shadow文字阴影的几种方法
2011/05/11 HTML / CSS
你所知道的集合类都有哪些?主要方法?
2012/12/31 面试题
护士自荐信怎么写
2013/10/18 职场文书
物业公司采购员岗位职责
2013/12/31 职场文书
初一英语教学反思
2014/01/11 职场文书
精彩的演讲稿开头
2014/05/08 职场文书
公司大门门卫岗位职责
2014/06/11 职场文书
2014教师党员个人自我评议
2014/09/20 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
政审证明材料
2015/06/19 职场文书
写作技巧:怎样写好一份优秀工作总结?
2019/08/14 职场文书
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python
Win7/8.1用户可以免费升级到Windows 11系统吗?
2021/11/21 数码科技
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android