码迷,mamicode.com
首页 > 编程语言 > 详细

python执行shell命令

时间:2014-09-22 00:53:31      阅读:434      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   div   sp   on   log   c   

python执行shell命令

#!/usr/bin/python2.7
#coding=utf-8              


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)

    
#main 方法
if __name__=="__main__":
    print execute_command("mongoexport -d test -c coll -o ss.dat")

 

python执行shell命令

标签:style   blog   color   io   div   sp   on   log   c   

原文地址:http://www.cnblogs.com/muzhongjiang/p/3985235.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!