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中的应用之translate和maketrans用法详解
Aug 27 Python
八大排序算法的Python实现
Jan 28 Python
利用python获取某年中每个月的第一天和最后一天
Dec 15 Python
python去掉 unicode 字符串前面的u方法
Oct 21 Python
pandas pivot_table() 按日期分多列数据的方法
Nov 16 Python
python绘制散点图并标记序号的方法
Dec 11 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
Feb 19 Python
Python初学者常见错误详解
Jul 02 Python
Django如何将URL映射到视图
Jul 29 Python
Python学习笔记之Break和Continue用法分析
Aug 14 Python
python实现逆滤波与维纳滤波示例
Feb 26 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
Mar 24 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
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
2014/03/25 PHP
PHP中怎样防止SQL注入分析
2014/10/23 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
2019/12/03 PHP
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
js 获取当前web应用的上下文路径实现方法
2016/08/19 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
2019/06/06 jQuery
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
[05:08]顺网杯ISS-DOTA2赛歌 少女偶像Lunar青春演绎
2013/12/05 DOTA
[01:25:33]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第二场 12.20
2020/12/23 DOTA
python数据结构之二叉树的建立实例
2014/04/29 Python
Python获取远程文件大小的函数代码分享
2014/05/13 Python
Python读取网页内容的方法
2015/07/30 Python
Python抓取框架 Scrapy的架构
2016/08/12 Python
python操作MySQL 模拟简单银行转账操作
2017/09/27 Python
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
Ruby如何实现动态方法调用
2012/11/18 面试题
财务总监管理岗位职责
2014/03/08 职场文书
小学新学期寄语
2014/04/02 职场文书
《桥》教学反思
2014/04/09 职场文书
婚前财产公证书
2014/04/10 职场文书
中学生英语演讲稿
2014/04/26 职场文书
支部书记四风对照材料
2014/08/28 职场文书
2014学校领导四风问题对照检查材料思想汇报
2014/09/22 职场文书
军训结束新闻稿
2015/07/17 职场文书
小学科学课教学反思
2016/02/23 职场文书
mysql left join快速转inner join的过程
2021/06/30 MySQL
springboot入门 之profile设置方式
2022/04/04 Java/Android