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日期操作学习笔记
Oct 07 Python
Python读写Redis数据库操作示例
Mar 18 Python
python字符串排序方法
Aug 29 Python
Python解析最简单的验证码
Jan 07 Python
利用python发送和接收邮件
Sep 27 Python
python爬取网易云音乐评论
Nov 16 Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 Python
python excel转换csv代码实例
Aug 26 Python
解决python使用list()时总是报错的问题
May 05 Python
Python创建临时文件和文件夹
Aug 05 Python
详解查看Python解释器路径的两种方式
Oct 15 Python
python实现自动化群控的步骤
Apr 11 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下mysql数据库操作类(改自discuz)
2010/07/03 PHP
解析PHP生成静态html文件的三种方法
2013/06/18 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
2016/09/14 Javascript
利用JS实现文字的聚合动画效果
2017/01/22 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
如何选择适合你的JavaScript框架
2017/11/20 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
JSON基本语法及与JavaScript的异同实例分析
2019/01/04 Javascript
跟老齐学Python之print详解
2014/09/28 Python
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
python PyTorch参数初始化和Finetune
2018/02/11 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
浅谈Python 多进程默认不能共享全局变量的问题
2019/01/11 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
2013/08/02 HTML / CSS
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
自我鉴定范文
2013/11/10 职场文书
饲料采购员岗位职责
2013/12/19 职场文书
工作自我评价怎么写
2014/01/29 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
赔偿协议书怎么写
2015/01/28 职场文书
安全守法证明
2015/06/23 职场文书
搞笑婚庆主持词
2015/06/29 职场文书