diff options
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> | 2016-03-31 18:54:41 +0100 |
---|---|---|
committer | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> | 2016-06-11 20:49:43 +0100 |
commit | 332a5c2553db41de777473a1e1be9cd1522c9496 (patch) | |
tree | 3ee06a59f147ccc4009b35cccfbe2461bcd18310 /src/fifo.py | |
parent | cf44cf7cdec9fdb35caa372563d57e7045dc29dd (diff) | |
download | poezio-332a5c2553db41de777473a1e1be9cd1522c9496.tar.gz poezio-332a5c2553db41de777473a1e1be9cd1522c9496.tar.bz2 poezio-332a5c2553db41de777473a1e1be9cd1522c9496.tar.xz poezio-332a5c2553db41de777473a1e1be9cd1522c9496.zip |
Move the src directory to poezio, for better cython compatibility.
Diffstat (limited to 'src/fifo.py')
-rw-r--r-- | src/fifo.py | 71 |
1 files changed, 0 insertions, 71 deletions
diff --git a/src/fifo.py b/src/fifo.py deleted file mode 100644 index 863ef228..00000000 --- a/src/fifo.py +++ /dev/null @@ -1,71 +0,0 @@ -""" -Defines the Fifo class - -This fifo allows simple communication between a remote poezio -and a local computer, with ssh+cat. -""" - -import logging -log = logging.getLogger(__name__) - -import os -import threading - -class OpenTrick(threading.Thread): - """ - A threaded trick to make the open for writing succeed. - A fifo cannot be opened for writing if it has not been - yet opened by the other hand for reading. - So, we just open the fifo for reading and we do not close - it afterwards, because if the other reader disconnects, - we will receive a SIGPIPE. And we do not want that. - - (we never read anything from it, obviously) - """ - def __init__(self, path): - threading.Thread.__init__(self) - self.path = path - self.fd = None - - def run(self): - self.fd = open(self.path, 'r', encoding='utf-8') - - -class Fifo(object): - """ - Just a simple file handler, writing and reading in a fifo. - Mode is either 'r' or 'w', just like the mode for the open() - function. - """ - def __init__(self, path, mode): - self.trick = None - if not os.path.exists(path): - os.mkfifo(path) - if mode == 'w': - self.trick = OpenTrick(path) - # that thread will wait until we open it for writing - self.trick.start() - self.fd = open(path, mode, encoding='utf-8') - - def write(self, data): - """ - Try to write on the fifo. If that fails, this means - that nothing has that fifo opened, so the writing is useless, - so we just return (and display an error telling that, somewhere). - """ - self.fd.write(data) - self.fd.flush() - - def readline(self): - "Read a line from the fifo" - return self.fd.readline() - - def __del__(self): - "Close opened fds" - try: - self.fd.close() - if self.trick: - self.trick.fd.close() - except: - log.error('Unable to close descriptors for the fifo', - exc_info=True) |