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分割文件的常用方法
Nov 01 Python
python:socket传输大文件示例
Jan 18 Python
Python科学画图代码分享
Nov 29 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
Jul 18 Python
Python的Tkinter点击按钮触发事件的例子
Jul 19 Python
TensorFlow MNIST手写数据集的实现方法
Feb 05 Python
Python处理mysql特殊字符的问题
Mar 02 Python
基于Python数据分析之pandas统计分析
Mar 03 Python
Python迭代器Iterable判断方法解析
Mar 16 Python
关于keras中keras.layers.merge的用法说明
May 23 Python
Pytorch环境搭建与基本语法
Jun 03 Python
Python标准库之typing的用法(类型标注)
Jun 02 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 register_shutdown_function函数的深入解析
2013/06/03 PHP
Laravel 5框架学习之Eloquent 关系
2015/04/09 PHP
PHP中创建和验证哈希的简单方法实探
2015/07/06 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
2009/10/29 Javascript
jquery清空textarea等输入框实现代码
2013/04/22 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
jQuery中prevUntil()方法用法实例
2015/01/08 Javascript
js实现滑动触屏事件监听的方法
2015/05/05 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
详解nodejs中exports和module.exports的区别
2017/02/17 NodeJs
JS实现队列的先进先出功能示例
2017/05/10 Javascript
jquery无缝图片轮播组件封装
2020/11/25 jQuery
js实现头像上传并且可预览提交
2020/12/25 Javascript
Python实现的Google IP 可用性检测脚本
2015/04/23 Python
python交互式图形编程实例(三)
2017/11/17 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
TensorFlow平台下Python实现神经网络
2018/03/10 Python
创建pycharm的自定义python模板方法
2018/05/23 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
Python中的流程控制详解
2021/02/18 Python
高校毕业生自我鉴定
2013/10/27 职场文书
廉政教育心得体会
2014/01/01 职场文书
初中校园之声广播稿
2014/01/15 职场文书
人力资源作业细则
2014/03/03 职场文书
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
食品药品安全责任书
2015/05/11 职场文书
独生子女证明范本
2015/06/19 职场文书
公司行政管理制度范本
2015/08/05 职场文书
MySQL8.0的WITH查询详情
2021/08/30 MySQL
Java实现房屋出租系统详解
2021/10/05 Java/Android