There are several ways to send a message from one script / app to another:
For your application, the valid method is to use a named pipe. Create it using os.mkfifo , open it read-only in your python application and wait for messages on it.
If you want your application to do other things while waiting, I recommend that you open the channel in non-blocking mode to search for data availability without blocking your script, as shown in the following example:
import os, time pipe_path = "/tmp/mypipe" if not os.path.exists(pipe_path): os.mkfifo(pipe_path) # Open the fifo. We need to open in non-blocking mode or it will stalls until # someone opens it for writting pipe_fd = os.open(pipe_path, os.O_RDONLY | os.O_NONBLOCK) with os.fdopen(pipe_fd) as pipe: while True: message = pipe.read() if message: print("Received: '%s'" % message) print("Doing other stuff") time.sleep(0.5)
Then you can send messages from bash scripts with the command
echo "your message" > /tmp/mypipe
EDIT: I cannot select select.select to work correctly (I used it only in C programs), so I changed my recommendation to non-blocking mode.
source share