python中执行shell的两种方法总结


Posted in Python onJanuary 10, 2017

一、使用python内置commands模块执行shell

commands对Python的os.popen()进行了封装,使用SHELL命令字符串作为其参数,返回命令的结果数据以及命令执行的状态;

该命令目前已经废弃,被subprocess所替代;

# coding=utf-8
'''
Created on 2013年11月22日
 
@author: crazyant.net
'''
import commands
import pprint
 
def cmd_exe(cmd_String):
  print "will exe cmd,cmd:"+cmd_String
  return commands.getstatusoutput(cmd_String)
 
if __name__=="__main__":
  pprint.pprint(cmd_exe("ls -la"))

二、使用python最新的subprocess模块执行shell

Python目前已经废弃了os.system,os.spawn*,os.popen*,popen2.*,commands.*来执行其他语言的命令,subprocesss是被推荐的方法;

subprocess允许你能创建很多子进程,创建的时候能指定子进程和子进程的输入、输出、错误输出管道,执行后能获取输出结果和执行状态。

# coding=utf-8
'''
Created on 2013年11月22日
 
@author: crazyant.net
'''
import shlex
import datetime
import subprocess
import time
 
def execute_command(cmdstring, cwd=None, timeout=None, shell=False):
  """执行一个SHELL命令
      封装了subprocess的Popen方法, 支持超时判断,支持读取stdout和stderr
      参数:
    cwd: 运行命令时更改路径,如果被设定,子进程会直接先更改当前路径到cwd
    timeout: 超时时间,秒,支持小数,精度0.1秒
    shell: 是否通过shell运行
  Returns: return_code
  Raises: Exception: 执行超时
  """
  if shell:
    cmdstring_list = cmdstring
  else:
    cmdstring_list = shlex.split(cmdstring)
  if timeout:
    end_time = datetime.datetime.now() + datetime.timedelta(seconds=timeout)
  
  #没有指定标准输出和错误输出的管道,因此会打印到屏幕上;
  sub = subprocess.Popen(cmdstring_list, cwd=cwd, stdin=subprocess.PIPE,shell=shell,bufsize=4096)
  
  #subprocess.poll()方法:检查子进程是否结束了,如果结束了,设定并返回码,放在subprocess.returncode变量中 
  while sub.poll() is None:
    time.sleep(0.1)
    if timeout:
      if end_time <= datetime.datetime.now():
        raise Exception("Timeout:%s"%cmdstring)
      
  return str(sub.returncode)
 
if __name__=="__main__":
  print execute_command("ls")

也可以在Popen中指定stdin和stdout为一个变量,这样就能直接接收该输出变量值。

总结

在python中执行SHELL有时候也是很必须的,比如使用Python的线程机制启动不同的shell进程,目前subprocess是Python官方推荐的方法,其支持的功能也是最多的,推荐大家使用。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
Dec 06 Python
Python 分析Nginx访问日志并保存到MySQL数据库实例
Mar 13 Python
Python+PIL实现支付宝AR红包
Feb 09 Python
Python实现的计算马氏距离算法示例
Apr 03 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
Apr 17 Python
详解python如何在django中为用户模型添加自定义权限
Oct 15 Python
python: 判断tuple、list、dict是否为空的方法
Oct 22 Python
解决python Markdown模块乱码的问题
Feb 14 Python
Python爬虫学习之获取指定网页源码
Jul 30 Python
django框架用户权限中的session缓存到redis中的方法
Aug 06 Python
Python3 用什么IDE开发工具比较好
Nov 28 Python
python利用文件时间批量重命名照片和视频
Feb 09 Python
Python用list或dict字段模式读取文件的方法
Jan 10 #Python
python导入时小括号大作用
Jan 10 #Python
python实现应用程序在右键菜单中添加打开方式功能
Jan 09 #Python
ubuntu系统下 python链接mysql数据库的方法
Jan 09 #Python
利用Python中unittest实现简单的单元测试实例详解
Jan 09 #Python
Python中的sort()方法使用基础教程
Jan 08 #Python
Python守护进程和脚本单例运行详解
Jan 06 #Python
You might like
php与java通过socket通信的实现代码
2013/10/21 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
理运用命名空间让js不产生冲突避免全局变量的泛滥
2014/06/15 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
jQuery增加自定义函数的方法
2015/07/18 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
js替换字符串中所有指定的字符(实现代码)
2016/08/17 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
关于js函数解释(包括内嵌,对象等)
2016/11/20 Javascript
微信小程序使用radio显示单选项功能【附源码下载】
2017/12/11 Javascript
Angular实现的table表格排序功能完整示例
2017/12/22 Javascript
Vuejs开发环境搭建及热更新【推荐】
2018/09/07 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
[52:06]完美世界DOTA2联赛决赛日 Inki vs LBZS 第一场 11.08
2020/11/10 DOTA
Python strip lstrip rstrip使用方法
2008/09/06 Python
Python利用Beautiful Soup模块搜索内容详解
2017/03/29 Python
《Python学习手册》学习总结
2018/01/17 Python
Python列表(list)所有元素的同一操作解析
2019/08/01 Python
如何理解python对象
2020/06/21 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
2013/08/02 HTML / CSS
Club Monaco加拿大官网:设计师男女服装
2019/09/29 全球购物
单位创先争优活动方案
2014/01/26 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
大学专科自荐信
2014/06/17 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
幼儿园园长个人总结
2015/03/02 职场文书
主题班会开场白
2015/06/01 职场文书
董事长致辞
2015/07/29 职场文书
运动会广播稿50字
2015/08/19 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书
十二月早安励志心语大全
2019/12/03 职场文书