#! /usr/bin/env python

# Remote python client.
# Execute Python commands remotely and send output back.

import sys
import string
from socket import *

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 = string.find(host, ':')
    if i >= 0:
        port = string.atoi(port[i+1:])
        host = host[:i]
    command = string.join(sys.argv[2:])
    s = socket(AF_INET, SOCK_STREAM)
    s.connect((host, port))
    s.send(command)
    s.shutdown(1)
    reply = ''
    while 1:
        data = s.recv(BUFSIZE)
        if not data: break
        reply = reply + data
    print reply,

main()
