0

I want to send some simple information, like an int or a string, between two Python programs. I thought of doing it by having the programs read and write from a single-line file. But that doesn't seem to work, since one file seems to block the file. Especially since I want to check for updates every 1/12 of a second or so.

If it did work, my idea use case would be for one program to send a message with

with open('input.py','w') as file:
    file.write('hello')

and receive it with

with open('input.py','r') as file:
    print(file.read())

I've been looking into how to do it with sockets, but every 'simple' tutorial seems to be targeted some much more complex use case. So how do I do what I need to do in a way that'll actually work?

3
  • Your question is too broad, sockets probably are the way to go though Commented Aug 29, 2019 at 20:34
  • check out pyzmq or tornado or similar libraries that will allow you to implement asynchronous communication over sockets. Commented Aug 29, 2019 at 20:36
  • Well, the main reason your example didn't work is because you're trying to write to a file opened in read-only mode and vice-versa. Commented Aug 29, 2019 at 20:57

1 Answer 1

2

The best route to go is to use the socket library. This creates a client-server connection, where you can send strings between programs from there.

server.py:

import socket                

s = socket.socket()          
print "Socket successfully created"
port = 12345     # Reserve a port on your computer...in our case it is 12345, but it can be anything
s.bind(('', port))         
print "Socket binded to %s" %(port) 
s.listen(5)    # Put the socket into listening mode       
print "Socket is listening"            

while True:
  c, addr = s.accept()   # Establish connection with client
  print 'Got connection from', addr 
  c.send('Thank you for connecting')   # Send a message to the client
  c.close()

client.py:

import socket                

s = socket.socket()
port = 12345     # Define the port on which you want to connect
s.connect(('127.0.0.1', port))   # Connect to the server on local computer
print s.recv(1024)   # Receive data from the server 
s.close()

From the terminal/shell:

# start the server:
$ python server.py
Socket successfully created
Socket binded to 12345
Socket is listening
Got connection from ('127.0.0.1', 52617)

# start the client:
$ python client.py
Thank you for connecting

As you can see, the client was able to receive the string "Thank you for connecting" by the server, thanks to the send() and recv() methods from the socket library.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.