#!/usr/bin/env python3

"""
Remote python client.
Execute Python commands remotely and send output back.
"""

import sys
from socket import socket, AF_INET, SOCK_STREAM, SHUT_WR

PORT = 4127
BUFSIZE = 1024

def main():
    if len(sys.argv) < 3:
        print("usage: rpython host command")
        sys.exit(2)
    host = sys.argv[1]
    port = PORT
    i = host.find(':')
    if i >= 0:
        port = int(port[i+1:])
        host = host[:i]
    command = ' '.join(sys.argv[2:])
    s = socket(AF_INET, SOCK_STREAM)
    s.connect((host, port))
    s.send(command.encode())
    s.shutdown(SHUT_WR)
    reply = b''
    while True:
        data = s.recv(BUFSIZE)
        if not data:
            break
        reply += data
    print(reply.decode(), end=' ')
    s.close()

main()
