封装subprocess的超时_非阻塞_实时输出等功能

      上周去三亚度假,玩的还行,价格也还行,如果你是临时起意去旅游的话,可以选择途牛自助,如果是长线计划,那么强烈推荐你用去哪儿+美团+大众的方案,巨靠谱 ! 在三亚这几天,一直在海边寻找比基尼,过程中被晒伤了,回北京浑身特么的痒痒….  睡不着,就写了个基于subprocess的封装模块…  

     因为后续的项目会大量的用python调用java的东西,python的系统调用模块,最好用的肯定是subprocess了,但对于我这种喜欢造轮子的人,肯定希望subprocess使用起来更加的舒服方便,需要说明的是subprocess在实现高级功能时候,有些掉链子,比如超时的功能,subprocess本身是不提供的,需要我们自己来绕着实现。另外subprocess也没有合理的管道输出功能,我自己封了一层,里面是yield返回值,这样你就可以用迭代器来获取每次的实时输出了。 

关于python easyrun模块介绍,文章的原文地址是,http://xiaorui.cc/?p=1941

项目名字

easyrun


介绍

一个subprocess模块的封装,让python更加方便地进行各种系统调用。

[开发easyrun的环境是python3哦]


安装

pip安装

pip install easyrun

源码安装

git clone git@github.com:rfyiamcool/easyrun.git
cd easyrun
python setup.py install

使用方法

只单纯的执行,然后返回linux run code和执行状态
>>> import easyrun
>>> r = easyrun.run(‘uptime’)
 04:06:37 up 2 min,  1 user,  load average: 0.20, 0.19, 0.08
>>> r.output
>>> r.success
True
>>> r.retcode
0
捕捉所有的执行结果
>>> r = easyrun.run_capture(‘uptime’)
>>> r.output
‘ 04:07:16 up 2 min,  1 user,  load average: 0.11, 0.17, 0.08\n’
>>> r.success
True
>>> r.retcode
0
把输出的结果精简过,maxlines是控制行数
print(run_capture_limited(‘ls’, maxlines=2).output)
easyrun example usage:
from easyrun import run_capture

r = run_capture(‘ls -la’)
if r.success:
    print(r.output)
else:
    print(“Error: ‘%s’ exit code %s” % (r.command, r.retcode))
    print(”         …”)
    # print last three lines of output
    for line in r.output.splitlines()[-3:]:
        print(”       %s” % line)

上面只是讲了easyrun的简单实用方法,另外关于subprocess的超时、异步、实时输出的实用方法,我测试例子还没有写,有时间我会补充上去的。 


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

1 Response

发表评论

邮箱地址不会被公开。 必填项已用*标注