I have two python applications. I need to send commands and data between them (between two processes). What is the best way to do that?
One program is a daemon who should accept commands and parameters from another GUI application.
How can I make daemon to monitor comands from GUI, while making it's job? I prefer solution would be crossplatform.
p.s. I use pyqt4 and python.
-
1Similar to stackoverflow.com/questions/3902997/…Ankur Gupta– Ankur Gupta2010年10月13日 09:09:40 +00:00Commented Oct 13, 2010 at 9:09
-
Oh, useful link. Thanks. Didn't stumble it while searching.PocketSam– PocketSam2010年10月13日 10:51:29 +00:00Commented Oct 13, 2010 at 10:51
3 Answers 3
You can use the following methods for data interchange:
Socket Programming : In Qt you can access QtNetwork module. See qt assistant for examples
IPC : Use shared Memory implemented in QSharedMemory class.
If this application will run on unix os only, then you can try Posix based message queue etc. for data interchange
DBUS : You will find both python and Qt have DBus based support. In Case of python you need to find the relevant module.
Using Multi Processing module
Using Posix/SystemV based IPC mechanism aka pipes, queue, etc.
5 Comments
sys.stdin would be useful in this case if it's a daemon communicating with a GUI since it's unlikely that once process would be launching the other.While it's not related to the way of the communication, I recommend checking out the pickle/cPickle module (which can encode objects into string streams and vice versa). Very useful.
Comments
Example.
Program_1.py
import pickle
import sys
for i in range(100):
pickle.dump(i,sys.stdout)
Program_2.py
from __future__ import print_function
import pickle
import sys
while True:
obj= pickle.load(sys.stdin)
print( obj )
Usage:
Program_1.py | Program_2.py
Under Windows, this may exhibit bad behavior because of the way Windows botches up simple file IO redirects.