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编写百度贴吧的简单爬虫
Apr 02 Python
在Django中同时使用多个配置文件的方法
Jul 22 Python
详谈在flask中使用jsonify和json.dumps的区别
Mar 26 Python
python对日志进行处理的实例代码
Oct 06 Python
python 中pyqt5 树节点点击实现多窗口切换问题
Jul 04 Python
python实现对图片进行旋转,放缩,裁剪的功能
Aug 07 Python
Python @property使用方法解析
Sep 17 Python
python实现广度优先搜索过程解析
Oct 19 Python
Python线程threading模块用法详解
Feb 26 Python
python计算Content-MD5并获取文件的Content-MD5值方式
Apr 03 Python
Python基于yaml文件配置logging日志过程解析
Jun 23 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
Jul 02 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中字符串与多进制转换函数的实例代码
2016/11/03 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
javascript删除一个html元素节点的方法
2014/12/20 Javascript
javascript中this指向详解
2016/04/23 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
js禁止浏览器的回退事件
2017/04/20 Javascript
javaScript 连接打印机,打印小票的实例
2017/12/29 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
2019/01/27 jQuery
使用 vue 实现灭霸打响指英雄消失的效果附demo
2019/05/06 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
Python中使用中文的方法
2011/02/19 Python
从Python程序中访问Java类的简单示例
2015/04/20 Python
对于Python中RawString的理解介绍
2016/07/07 Python
教你学会使用Python正则表达式
2017/09/07 Python
Python3.4实现远程控制电脑开关机
2018/02/22 Python
Python绘制的二项分布概率图示例
2018/08/22 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
简单了解Pandas缺失值处理方法
2019/11/16 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
python中类与对象之间的关系详解
2020/12/16 Python
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
电子邮箱格式怎么写
2014/01/12 职场文书
宣传策划类求职信范文
2014/01/31 职场文书
学习十八届三中全会精神实施方案
2014/02/17 职场文书
《池塘边的叫声》教学反思
2014/04/12 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
离婚协议书怎么写
2015/01/26 职场文书
2015年幼儿园中班工作总结
2015/04/25 职场文书
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL