首页 > 代码库 > python subprocess阻塞
python subprocess阻塞
import selectimport osimport subprocessimport timeimport fcntlargs = [‘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进程 返回-9print 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 subprocess阻塞
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。