Zack
Zack

Reputation: 4375

Is it possible to pass messages to/from an .exe using Python?

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

Answers (1)

roq
roq

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

Related Questions