ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

subprocess.Popen() 常用方法

2021-06-03 09:34:35  阅读:233  来源: 互联网

标签:常用 stdout Popen 程序执行 PIPE sleep subprocess root


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)

 

标签:常用,stdout,Popen,程序执行,PIPE,sleep,subprocess,root
来源: https://www.cnblogs.com/xiao-huai-hai/p/14843858.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有