subprocess.Popen() 常用方法
p.stdout.read() :用于读取标准输出,会一次性读取所有内容,返回一个字符串
p.stdout.readline() :用于读取标准输出,一次只读取一行内容,返回一个字符串
p.stdout.readlines() :用于读取标准输出,一次性读取所有内容,返回一个列表,每一行是列表的一个元素
from subprocess import Popen, PIPE
p = Popen('ls /data', stdout=PIPE, shell=True)
for line in p.stdout.readlines():
print(line),
[root@localhost ~]$ python 1.py
1.txt
2.txt
3.txt
p.wait() :等待子进程结束,并返回状态码。如下,如果没有加上 p.wait(),则 sleep 100 还没有执行完,就会执行 print('End'),如果加上就会等待 sleep 100 执行完
from subprocess import Popen, PIPE
p = Popen('sleep 100', stdout=PIPE, shell=True)
p.wait()
print('End')
p.pid :用于查看子进程的PID
from subprocess import Popen, PIPE
p = Popen('sleep 100', stdout=PIPE, shell=True)
print(p.pid)
[root@localhost ~]$ python 1.py
35327
[root@localhost ~]$ ps aux | grep 35327
root 35327 0.0 0.0 107904 612 pts/0 S 17:56 0:00 sleep 100
root 35329 0.0 0.0 112676 984 pts/0 S+ 17:57 0:00 grep --color=auto 35327
p.poll() :用于检查子进程(命令)是否已经执行结束,没结束返回None,结束后返回状态码
#!/usr/bin/env python
#-*- coding:utf-8 -*- import time
from subprocess import Popen, PIPE p = Popen('sleep 3', stdout=PIPE, shell=True) while True:
if p.poll() == None:
print('程序执行中...')
time.sleep(1)
else:
print('程序执行完毕, 状态码为:%s' % p.poll())
break
[root@localhost ~]$ python 1.py
程序执行中...
程序执行中...
程序执行中...
程序执行完毕, 状态码为:0
p.returncode :用于返回命令执行完之后的状态码
#!/usr/bin/env python
#-*- coding:utf-8 -*- import time
from subprocess import Popen, PIPE p = Popen('sleep 3', stdout=PIPE, shell=True) while True:
if p.poll() == None:
print('程序执行中...')
time.sleep(1)
else:
print('程序执行完毕, 状态码为:%s' % p.returncode)
break
[root@localhost ~]$ python 1.py
程序执行中...
程序执行中...
程序执行中...
程序执行完毕, 状态码为:0
p.kill() :用于杀死子进程
from subprocess import Popen, PIPE
p = Popen('sleep 100', stdout=PIPE, shell=True)
print(p.pid)
p.kill()
[root@localhost ~]$ python 1.py
35403
[root@localhost ~]$ ps aux | grep 35403 # 可以看到子进程已经不在了
root 35405 0.0 0.0 112676 980 pts/0 S+ 18:12 0:00 grep --color=auto 35403
p.terminate() :用于终止子进程,与 kill() 差不多
from subprocess import Popen, PIPE
p = Popen('sleep 100', stdout=PIPE, shell=True)
print(p.pid)
p.terminate()
[root@localhost ~]$ python 1.py
35403
[root@localhost ~]$ ps aux | grep 35403 # 可以看到子进程已经不在了
root 35405 0.0 0.0 112676 980 pts/0 S+ 18:12 0:00 grep --color=auto 35403
p.communicate() :该方法可用来与子进程进行交互,比如发送数据到stdin,结果会返回一个元组,这个元组包含stdout和stderr
from subprocess import Popen, PIPE
p = Popen('cat', stdin=PIPE, stdout=PIPE, shell=True)
print p.communicate('hello world')
[root@localhost ~]$ python 1.py
('hello world', None)
subprocess.Popen() 常用方法的更多相关文章
- Python subprocess.Popen communicate() 和wait()使用上的区别
之所以会纠结到这个问题上是因为发现在调用Popen的wait方法之后程序一直没有返回.google发现wait是有可能产生死锁的.为了把这个问题彻底弄清楚,搜索一些资料过来看看: 原文链接:http: ...
- python subprocess.Popen 非阻塞
1.非阻塞设置subprocess.Popen(args, stdout=subprocess.PIPE,stderr=subprocess.PIPE) def non_block_read(outp ...
- python中subprocess.Popen.poll
import subprocess proc = subprocess.Popen(['python', 'test.py'], stdout=subprocess.PIPE) while 1: pr ...
- Python subprocess Popen
目的:顺序执行进程 在Bash里面类似 a.sh && b.sh && c.sh 先来说下Popen这个函数 class subprocess.Popen(args ...
- python中的subprocess.Popen()使用
python中的subprocess.Popen()使用 从python2.4版本开始,可以用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回 ...
- python subprocess.Popen 控制台输出 实时监控百度网ping值
import subprocess file_out = subprocess.Popen('ping www.baidu.com', shell=True, stdout=subprocess.PI ...
- Python调用subprocess.Popen卡死的解决方案
转载自:https://www.cnblogs.com/keke-xiaoxiami/p/7875009.html 在Python中,调用:subprocess.Popen(cmd, stdout = ...
- subprocess.Popen指令包含中文导致乱码问题解决
其实解决起来非常简单,如果了解到Windows中文系统编码为GB2312的话 只需将你包含中文的指令字符串编码为GB2312即可 cmd = u'cd 我的文档' cmd.encode('gb2312 ...
- python - 远程主机执行命令练习(socket UDP + subprocess.Popen()) 练习1
环境是windows 环境. server端: import socket import subprocess ss = socket.socket(socket.AF_INET,socket.SOC ...
随机推荐
- ISO镜像安装UbuntuKylin 13.04 64位,启动菜单制作实例
1.将光盘镜像中的vmlinuz.efi.initrd.lz,和镜像本身(ubuntu....iso) 三个文件复制到U盘根目录下.如果下面的方法没成功启动,你可能要把U盘格式化为USB-HDD FA ...
- OpenSAML2.X 在SSO系统中的应用
背景 年底的时候有机会开发一个SPA(单页面应用)的项目,那时候须要用到票据的方式能够用Cookie的方式来登录.当是想到了OpenID或者是CAS的方式来做统一认证中心.后来一个安全界的大牛推荐让我 ...
- Python 爬虫 去掉网页注释,去掉网页注释
在爬虫中,我们遇到了网页注释的问题,这些内容,第一,耗费内存资源,第二,在解析网页的时候,不易匹配出来信息.那么我们该如何去掉他们呢??? 我们可以去使用正则去过滤掉他们 方法如下 result = ...
- Mysql 修改数据库,mysql修改表类型,Mysql增加表字段,Mysql删除表字段,Mysql修改字段名,Mysql修改字段排列顺序,Mysql修改表名
对于已经创建好的表,尤其是已经有大量数据的表,如果需要对表做一些结构上的改变,我们可以先将表删除(drop),然后再按照新的表定义重建表.这样做没有问题,但是必然要做一些额外的工作,比如数据的重新加载 ...
- openWRT学习之LUCI之中的一个helloworld演示样例
备注1:本文 讲述的是原生的openWRT环境下的LUCI 备注2:本文參考了诸多资料.感谢网友分享.參考资料: http://www.cnblogs.com/zmkeil/archive/2013/ ...
- 多国语言解决方案gnu.gettext + poedit
1.工具简介 1.1.关于i18n i18n其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数是“国际化”的简称. i10n为资源本地化,全称为Locali ...
- SMBUS讀取數據的方法
第一步 将HST_D0寄存器清零 第二部 确定HST_STS (SMB_BASE 00h)寄存器裡面的所有狀態位是清除的(写清零) 第三步 往XMIT_SLVA(SMB_BAS ...
- spring 学习资料备份
易百教程 https://www.yiibai.com/spring/spring-autowiring-by-name.html
- Struts2使用OGNL遍历各种map总结
一.Action中的代码:MapAction.java package com.zx.demo.action; import java.util.ArrayList; import java.ut ...
- vue2.0项目的环境配置以及有哪些的坑
npm run dev项目运行:$ git pull origin master 更新代码项目的提交代码git push -u origin master 这里就开始准备提交到网络上了 项目的地址gi ...