Python Subprocess多进程模块 进程被阻塞的解决方案

发布于 / Python / 0 条评论
import Subprocess

即可引入模块

subprocess.Popen(['ping 192.168.1.1'], shell=True)

即可运行命令。

blob.png

这时,ping的stdout是作为python的stdout直接输出的,如果不想直接输出,想让它在后台安安静静的运行,可以把stdout重定向到程序的内置管道subprocess.PIPE

stdin,stderr都可以重定向

subprocess.Popen(['ping 192.168.1.1'], shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE,stderr=subprocess.PIPE)

这条程序会创建子程序,然后立即返回一个subprocess.Popen的对象,要是想让线程阻塞住,等待命令运行完成,可以使用wait函数。例如:

p = subprocess.Popen(['ping 192.168.1.1'], shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
p.wait()

这样,程序就会阻塞在wait函数处。


有的时候,Popen运行的程序也会被阻塞住,这可能是程序的stdout太大了,把管道的缓冲区填满了,所以进程会被阻塞,所以最好使用comminute函数

_WAIT_ = p.comminute()

转载原创文章请注明,转载自: 斐斐のBlog » Python Subprocess多进程模块 进程被阻塞的解决方案
目前还没有评论,快来抢沙发吧~