Reputation: 4375
I know that you can pass in an initial argument using the sys.argv, but what I'm curious about is whether you can set up some kind of running communication between a Python program and an .exe.
For example, say the executable in question was just another Python program that I compiled to a binary using PyInstaller. And all it did was wait for something to send it a message and then print out said message.
Something along the lines of:
while True:
message = self.queue.get() #Blocks until something is actually in the queue
print message
So, we turn that into an .exe. Now, is there a way to send messages to it? Like, could one 'hook' into that message queue and push things to it? Or have the .exe send things over to the the python program?
Upvotes: 0
Views: 924
Reputation: 548
It's very common to use sockets to achieve this interprocess communication (IPC). You can find a very basic way at Low-level networking interface. I will reproduce it here:
# Echo server program
import socket
HOST = '' # Symbolic name meaning all available interfaces
PORT = 50007 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
data = conn.recv(1024)
if not data: break
conn.sendall(data)
conn.close()
# Echo client program
import socket
HOST = 'daring.cwi.nl' # The remote host
PORT = 50007 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall('Hello, world')
data = s.recv(1024)
s.close()
print 'Received', repr(data)
Try to look for interprocess communication and you find lot of info.
Upvotes: 2