我是靠谱客的博主 自觉樱桃,最近开发中收集的这篇文章主要介绍python read函数阻塞_python subprocess阻塞,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

import select

import os

import subprocess

import time

import fcntl

args = ['python','./fetch_file2.py',ip,path]

proc = subprocess.Popen(args, stdout=subprocess.PIPE,stderr=subprocess.PIPE,close_fds=True)

def non_block_read(output): # 避免阻塞

fd = output.fileno()

fl = fcntl.fcntl(fd, fcntl.F_GETFL)

fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)

try:

return output.read()

except:

return ""

while proc.poll() is None: #fetch中rsync结束。但是fetch没有结束(怀疑输出过大) 导致这里一直是None

pass

print proc.poll() # 杀死fetch进程 返回-9

print proc.stderr.read() #阻塞

#方法1:

#non_block_read(proc.stderr) #防止阻塞

#方法2:

select_rfds = [ proc.stdout, proc.stderr]

(rfds, wfds, efds) = select.select(select_rfds, [],[])

if proc.stderr in rfds: #不存在。若select_rfds=[stderr],则阻塞在select上

len = proc.stderr.read(10)

if len == 0:

print "empty"

else:

print "proc.stderr"

if proc.stdout in rfds:

print "proc.stdout"

最后

以上就是自觉樱桃为你收集整理的python read函数阻塞_python subprocess阻塞的全部内容,希望文章能够帮你解决python read函数阻塞_python subprocess阻塞所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部