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 sys模块sys.path使用方法示例
Dec 04 Python
python基础教程之python消息摘要算法使用示例
Feb 10 Python
Python中的面向对象编程详解(下)
Apr 13 Python
python简单实现基数排序算法
May 16 Python
Python实现TCP/IP协议下的端口转发及重定向示例
Jun 14 Python
Python实现求数列和的方法示例
Jan 12 Python
Python 将Matrix、Dict保存到文件的方法
Oct 30 Python
关于windows下Tensorflow和pytorch安装教程
Feb 04 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
Feb 14 Python
Python用K-means聚类算法进行客户分群的实现
Aug 23 Python
python 如何在测试中使用 Mock
Mar 01 Python
python pandas 解析(读取、写入)CSV 文件的操作方法
Dec 24 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
最贵的咖啡是怎么产生的,它的风味怎么样?
2021/03/04 新手入门
PHP设计模式之调解者模式的深入解析
2013/06/13 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
PHP生成随机字符串(3种方法)
2015/09/25 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
2017/06/17 PHP
js 自定义的联动下拉框
2010/02/07 Javascript
jquery 3D球状导航的文章分类
2010/07/06 Javascript
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
jquery 判断滚动条到达了底部和顶端的方法
2014/04/02 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
jquery实现submit提交表单
2015/02/03 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
[40:06]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第一场
2018/04/04 DOTA
用Python遍历C盘dll文件的方法
2015/05/06 Python
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
python 中random模块的常用方法总结
2017/07/08 Python
使用python爬取微博数据打造一颗“心”
2019/06/28 Python
在python里面运用多继承方法详解
2019/07/01 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
TensorFlow学习之分布式的TensorFlow运行环境
2020/02/05 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
小学生元旦广播稿
2014/02/21 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
2015年工程部工作总结
2015/04/30 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书