70 lines
1.8 KiB
Python
70 lines
1.8 KiB
Python
import os
|
|
from py.__.green import greensock2
|
|
|
|
|
|
class FDInput(object):
|
|
|
|
def __init__(self, read_fd, close=True):
|
|
self.read_fd = read_fd
|
|
self._close = close # a flag or a callback
|
|
|
|
def shutdown_rd(self):
|
|
fd = self.read_fd
|
|
if fd is not None:
|
|
self.read_fd = None
|
|
close = self._close
|
|
if close:
|
|
self._close = False
|
|
if close == True:
|
|
os.close(fd)
|
|
else:
|
|
close()
|
|
|
|
__del__ = shutdown_rd
|
|
|
|
def wait_input(self):
|
|
greensock2.wait_input(self.read_fd)
|
|
|
|
def recv(self, bufsize):
|
|
## f = open('LOG', 'a')
|
|
## import os; print >> f, '[%d] RECV' % (os.getpid(),)
|
|
## f.close()
|
|
res = greensock2.read(self.read_fd, bufsize)
|
|
## f = open('LOG', 'a')
|
|
## import os; print >> f, '[%d] RECV %r' % (os.getpid(), res)
|
|
## f.close()
|
|
return res
|
|
|
|
def recvall(self, bufsize):
|
|
return greensock2.readall(self.read_fd, bufsize)
|
|
|
|
|
|
class FDOutput(object):
|
|
|
|
def __init__(self, write_fd, close=True):
|
|
self.write_fd = write_fd
|
|
self._close = close # a flag or a callback
|
|
|
|
def shutdown_wr(self):
|
|
fd = self.write_fd
|
|
if fd is not None:
|
|
self.write_fd = None
|
|
close = self._close
|
|
if close:
|
|
self._close = False
|
|
if close == True:
|
|
os.close(fd)
|
|
else:
|
|
close()
|
|
|
|
__del__ = shutdown_wr
|
|
|
|
def wait_output(self):
|
|
greensock2.wait_output(self.write_fd)
|
|
|
|
def sendall(self, buffer):
|
|
## f = open('LOG', 'a')
|
|
## import os; print >> f, '[%d] %r' % (os.getpid(), buffer)
|
|
## f.close()
|
|
greensock2.writeall(self.write_fd, buffer)
|