subprocess.Popen() 常用方法
2021/6/3 10:24:13
本文主要是介绍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() 常用方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享