python subprocess使用记录
2019独角兽企业重金招聘Python工程师标准>>>
前几天发现服务器上有几个zombie进程,搜索了一下(ps -ef | grep defunct),僵尸进程的父进程是以前写的python同步脚本。
仔细看了下代码,发现在这:
sub = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
# other codes
对,父进程开启了子进程后,并无任何动作,子进程执行完成后成为一个僵尸进程。
解决方法很简单,父进程wait子进程即可,但因为标准输出和标准错误输出是管道方式(PIPE),直接使用wait()有可能会导致管道堵塞,python官方文档亦有以下叙述:
WarningThis will deadlock when using stdout=PIPE and/or stderr=PIPE and the child process generates enough output to a pipe such that it blocks waiting for the OS pipe buffer to accept more data. Use communicate() to avoid that.
官方建议适用communicate方法,于是修改代码如下:
sub = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
out, err = sub.communicate()
另外一种修改方式,适用于不关心子进程返回结果的场景,可以将STDOUT和STDERR输出结果定向到/dev/dull去,再调用wait()即可,如下:
sub = subprocess.Popen(cmd, shell=True, stdout=open("/dev/null", "w"), stderr=subprocess.STDOUT)
sub.wait()
因为需要子进程的处理信息,选用了第一种方法。重新启动python脚本,不再出现僵尸进程的问题了。
转载于:https://my.oschina.net/catandpaperball/blog/477184
python subprocess使用记录相关推荐
- Python 库的记录
GitHub - jobbole/awesome-python-cn: Python资源大全中文版,内容包括:Web框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理.文本处理.自然 ...
- python popen阻塞_对Python subprocess.Popen子进程管道阻塞详解
问题产生描述 使用子进程处理一个大的日志文件,并对文件进行分析查询,需要等待子进程执行的输出结果,进行下一步处理. 出问题的代码 # 启用子进程执行外部shell命令 def __subprocess ...
- python subprocess库 终端命令行命令
python subprocess subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值. 具体看官方文档 https://docs.python.or ...
- Python 装饰器记录总结 (终极版)
Python 装饰器记录总结 (终极版) 原文链接:http://magicroc.com/2017/04/10/Python装饰器记录总结/ 装饰器是一个函数,一个用来包装函数的函数,装饰器在函数申 ...
- python 程序耗时记录_Python学校的学生身高记录程序
python 程序耗时记录 A team of 5 people is assigned with a task to record the heights of students in a scho ...
- Python: subprocess.Popen()不支持unicode问题解决
Python: subprocess.Popen()不支持unicode问题解决 参考文章: (1)Python: subprocess.Popen()不支持unicode问题解决 (2)https: ...
- Python常见问题解决记录1-Non-ASCII character ‘\xe7‘错误
Python常见问题解决记录1-Non-ASCII character '\xe7'错误 参考文章: (1)Python常见问题解决记录1-Non-ASCII character '\xe7'错误 ( ...
- python subprocess pipe_python类库31[进程subprocess与管道pipe]
修改自: 原文 : Working with Python subprocess - Shells, Processes, Streams, Pipes, Redirects and More 一 程 ...
- Python Subprocess Popen 管道阻塞问题分析解决
Python Subprocess Popen 管道阻塞问题分析解决 参考文章: (1)Python Subprocess Popen 管道阻塞问题分析解决 (2)https://www.cnblog ...
最新文章
- HK-2000 数采仪 航空头接口定义
- flex+hibernate 中java的pojo与as的pojo的映射问题
- C++string类常用函数
- P2467-[SDOI2010]地精部落【dp】
- 两个摄像头合成一路_教你把一个摄像机添加到两台录像机
- “头腾大战”烧至在线办公:微信封禁飞书做错了吗?
- js 对象及空对象或数组及空数组的判断与比较
- final关键字深入解析
- topjui中combobox使用
- springboot启动自动停止
- 使用python语解决一个小学数学题----鸡兔同笼问题
- 安徽大学计算机考研经验贴
- 2019游戏 f1_F1 2019
- 大数据的概念、特点及应用场景
- yuv 格式之 Semi Planar和Planar
- svn多分支合并主干冲突 svn Working copy and merge source not ready for reintegration
- Linux下empress数据库,Linux命令compress使用“Lempress-Ziv”编码压缩数据文件
- 微信小程序开发之——mpvue开发小程序
- 花开不败 一个复旦女生的高三生活
- 数学建模:非线性规划的 Python 求解
热门文章
- 如何将IDEA文件提交至Gitee仓库
- JavaWeb(四)——在IDEA中配置Tomcat、pom文件
- python中进制chr_python中的chr() 如何返回字符?
- visionpro定位不跟随图像_机器视觉应用越来越多!不懂怎么办?在线公开课免费学...
- 计算机视觉与深度学习 | SLAM、视觉里程计、VIO、Net-SLAM、激光SLAM、语义SLAM、数据集( state-of-the-art)
- TCP协议的粘包问题(数据的无边界性)
- EndDialog和CDialog::OnOK()
- python精要(82)-wxpython(3)-静态文本控件与状态栏
- 【Python基础】这份 pip 使用小抄,要有全有多全(建议收藏)
- 【数据竞赛】从0梳理1场时间序列赛事!