python--终端工具之subprocess
一、
subprocess.getstatusoutput
import subprocess
cmd = 'ifconfig'
def cmds(cmd,print_msg=True):
status,result = subprocess.getstatusoutput(cmd)
if status > 0:
return {"status":"failed","msg":result}
return {"status":"succeed","msg":result}
可以将执行之后的状态和执行结果反馈,但是痛点:result是一次性返回,简单的说就是,比如你执行一条ping www.baidu.com的命令,程序一直是在执行状态,无任何输出,只当执行结束后返回status和result
二、
subprocess.Popen
import subprocess
cmd = 'ping www.baidu.com'
def cmds(cmd,print_msg=True):
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
print(p.stderr)
lines = []
for line in iter(p.stdout.readline, b''):
line = line.rstrip().decode('utf8')
if print_msg:
print(">>>", line)
if __name__ == '__main__': cmds(cmd)
成功解决之前的问题,可将命令的执行结果实时更新,但是在执行结束之后并不能得知其执行状态是成功或失败
def cmds(self,cmds, print_msg=True):
compilePopen = subprocess.Popen(cmds,shell=True,stdout=subprocess.PIPE,close_fds=True,stderr=subprocess.STDOUT)
compilePopen.wait() # 没有这个无法得知compilePopen.returncode状态是否成功
for line in iter(compilePopen.stdout.readline, b''):
msg = line.rstrip().decode('utf8')if print_msg:
self.ws.send(json.dumps({
"progress": "run_script",
"msg": msg,
'ctime': time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
'user': self.task.username
}))
# if compilePopen.returncode >= 0: # 执行成功
# else: # 执行失败
重新调整了之后可以将实时内容和执行状态都做拿到,但是亲测感觉效率并不好,还有没有更好的办法呢?
或者
def sh(self,cmds, print_msg=True):
print('sh')
msgStr = []
env = Business_Env_Assets.objects.filter(id=self.apps.env).first().name
compilePopen = subprocess.Popen(cmds,shell=True,stdout=subprocess.PIPE,close_fds=True,stderr=subprocess.STDOUT)
returnMsg = ''
for line in iter(compilePopen.stdout.readline, b''):
line = line.rstrip().decode('utf8')
print(line)
stdout, stderr = compilePopen.communicate()
returncode = compilePopen.returncode
if returncode > 0:
result = {"status": "failed", "msg": returnMsg}
result = {"status": "succeed", "msg": returnMsg}
self.handle_result("post_deploy", result)
python--终端工具之subprocess的更多相关文章
- 12款最佳Linux命令行终端工具, 20款优秀的 Linux 终端仿真器
12款最佳Linux命令行终端工具 如果你跟我一样,整天要花大量的时间使用Linux命令行,而且正在寻找一些可替代系统自带的老旧且乏味的终端软件,那你真是找对了文章.我这里搜集了一些非常有趣的 ...
- Python标准库---子进程 (subprocess包)
这里的内容以Linux进程基础和Linux文本流为基础.subprocess包主要功能是执行外部的命令和程序.比如说,我需要使用wget下载文件.我在Python中调用wget程序.从这个意义上来说, ...
- 下破解安装Python开发工具WingIDE4.1
步骤: 1.将系统时间调整到一个月之前,然后执行安装. 可以使用date命令调整系统时间,如:date -s '2012-08-14 10:00:00' 2.安装成功后,打开程序,按照提示信息,申请一 ...
- Lubuntu下小巧好用的Python编辑工具Geany
在Lubuntu系统上有很多的Python编辑器,如eclipse,PyCharm等,功能繁多,市场占有率高,但动辄几百M的体积有些巨大,博主今天推荐一款精简且易用的Python开发工具--Geany ...
- Python生态工具、文本处理和系统管理(虚拟)
一.Python生态工具 一.Python内置小工具 1.秒级启动一个下载服务器 Python 内置了一个下载服务器就能够显著提升效率了 . 例如, 你的同事要让你传的文件位于某一个目录下,那么,你可 ...
- Mac OS X 命令行用户应当知道的八个终端工具
原文链接:Eight Terminal Utilities Every OS X Command Line User Should Know OS X 的Terminal 终端开辟了强大的UNIX实 ...
- 【Machine Learning】Python开发工具:Anaconda+Sublime
Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...
- Python开发工具PyCharm个性化设置(图解)
Python开发工具PyCharm个性化设置,包括设置默认PyCharm解析器.设置缩进符为制表符.设置IDE皮肤主题等,大家参考使用吧. JetBrains PyCharm Pro 4.5.3 中文 ...
- [转]12款最佳Linux命令行终端工具
摘要 “工欲善其事必先利其器”,作为菜鸟,也是从别人那里偷学来的一些东东.今天看到同事用到一个终端命令行工具,觉得自己弱爆了.然后在网上搜了下该工具.发现类似的工具还是挺多的,只是自己不知道罢了. 原 ...
- Python小工具--删除svn文件
有的时候我们需要删除项目下的svn相关文件,但是SVN会在所有的目录下都创建隐藏文件.svn,手工一个个目录查找然后删除显然比较麻烦.所以这里提供了一个Python小工具用于批量删除svn的相关文件: ...
随机推荐
- 懒人必备,IntelliJ IDEA中代码一键生成
之前有不少小伙伴问松哥微人事项目(https://github.com/lenve/vhr)使用的 MyBatis 逆向工程在哪里?其实旧版微人事当时没有使用逆向工程,是我自己手动敲出来的,当然手动敲 ...
- symfony传参,接收参数,twig方法记录
呜呜呜,很烦,让我自己完成一个在线学习系统后端,和前端整合一下,我把接口参数搞了半天(学习symfony太久远),记录一下屈辱历史,以后注意,不然上线了一堆bug,很烦 下面是几种返回的数据的格式 1 ...
- Java 中序列化与反序列化
一. 序列化和反序列化概念 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.将程序中的对象,放入文 ...
- python学习(8)实例:写一个简单商城购物车的代码
要求: 1.写一段商城程购物车序的代码2.用列表把商城的商品清单存储下来,存到列表 shopping_mail3.购物车的列表为shopping_cart4.用户首先输入工资金额,判断输入为数字5.用 ...
- 从Golang中open的实现方式看Golang的语言设计
Golang有很多优点: 开发高效:(C语言写一个hash查找很麻烦,但是go很简单) 运行高效:(Python的hash查找好写,但比Python高效很多) 很少的系统库依赖:(环境依赖少,一般不依 ...
- linux下命令的全称,方便记忆(转)-修改补充版
su:Swith user 切换用户,切换到root用户 cat: Concatenate 串联(cat(Concatenate)命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容, ...
- [MacOS]Sublime text3 安装(一)
官网地址 https://www.sublimetext.com/ 直接下载地址(MacOS) https://download.sublimetext.com/Sublime%20Text%20Bu ...
- Mysql无法启动、闪退
一.mysql下载完成后,运行bin目录下的mysql.exe,提示文件缺失 二.此报错为VC运行库不全或没有安装导致,百度搜索“微软常用运行库合集”进行下载安装即可解决 三.运行时闪退,无法 ...
- codewars--js--Hamming Numbers
问题描述: A Hamming number is a positive integer of the form 2i3j5k, for some non-negative integers i, j ...
- electron 安装过程出现未成功地运行
问题 正文 产生问题得原因? 是因为之前安装了该程序,但是卸载的时候可能人为的直接删除了卸载程序. 这时候安装包会触发找到注册表中,该appid相同地址的卸载程序位置,然后进行调用,如果没有的话,只会 ...