Skip to content

WebReflection/filebus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

filebus

Build Status Coverage Status

Social Media Photo by Juan Encalada on Unsplash

A communication channel based on files watcher.

Example

You can clone this repository and inotifywait-spawn in the same folder, enter into the filebus/example directory and launch npm start to see Python and NodeJS communicating with each other.

You can also grasp most of this utility via the following example:

const FileBus = require('filebus');

// new instance with either an input to listen for
// or an output to send messages ... or both!
const fb = new FileBus(
  input,  // optional input file to watch
  output  // optional output file to write
);

// INPUT relatd API

// will be triggered when the file will contain
// "ready" with eventually extra data as JSON
fb.on('ready', console.log);

// triggered when there are reading errors
// from the watched input file
fb.on('error', console.error);

// stop listening to events
// no more events triggered
fb.stop();


// OUTPUT related API

// will write the following into the output file
// "ready {"optional":"data"}"
// if there is a watcher listening for "ready",
// or any other event name, it will be invoked
// receiving the object {optional: 'data'}
fb.send('ready', {optional: 'data'}).then(() => {
  // executed once the content has been written
  // and also synced with the system
});


// HANDSHAKE

// whenever the input/output files are between two
// different instances of FileBus or two different PLs
// the handshake, from one of the two sides, grants
// that both instances are setup and ready to react

fb = new FileBus('.python', '.js', true);
// Python counterpart: fb = FileBus('.js', '.python')

// will happen once Python responds
fb.once('handshake', () => {
  fb.send('update-display', 'Hello World');
});

fb.handshake();

Communicate with Python 3

This module contains a python/filebus.py file where you can import FileBus and use pretty much exact same API.

Please note the python file also relies in this module dependencies, so that inotifywait-spawn module must be installed too, otherwise its python/inotifywait.py would be missing.

inotifywait requires the Python 3 inotify_simple module.

sudo pip3 install inotify_simple

To import FileBus you can write the following:

import os
import sys
sys.path.insert(1, os.path.realpath('./node_modules/filebus/python'))

from filebus import FileBus

fb = FileBus('test.txt', 'test.txt', True)
fb.on('ready', lambda data: print(data))
fb.send('ready')

# wait for events to trigger
import time
time.sleep(0.1)

# close and cleanup the file
fb.stop()

Practical Applications

The countdown project is fully based on FileBus to drive e-paper displays, via Python 3, from Node.js.

Check its JS side, or one of its Python counterparts.

About

I/O based on inotify and file watchers

Resources

License

Stars

Watchers

Forks

Packages

No packages published