Re: How do you develop on the PocketPC?

Thomas Heller <[email protected]>
Newsgroups gmane.comp.python.windows-ce
Message-ID <[email protected]>
"Luke Dunstan" <[email protected]> writes:

> I sometimes use interactive commands, but usually through a program called 
> ActiveSync Remote Display which is like Remote Desktop.

Ok, I've downloaded the Windows Mobile Power toys. Maybe there's
something useful in it.

> Other times I do double-click on scripts, and it is possible (but
> inconvenient) to see the error messages by switching to the Python
> window.

Ah, I see.  Could the error window be made smaller and moveable so that
one could move it around to see the actual traceback?

> I have been planning on creating some tools to help this process but
> maybe you've already done that?
>
> Your script would be appreciated.

I've attached it.  There are two issues with it:

First, you have to set the PC's IP address in the client.py script.
For me, 127.0.0.1 did *not* seem to work.

Second, you must start the server.py script on the PC before starting
the client.py script on the pocket device.  I was not able to start the
connection from the pocket device, although that would seem more logical.

Thomas

_______________________________________________
PythonCE mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pythonce
client.py (text/x-python, 1.3 KB)
# Thomas Heller 20060109
# Run this on the Pocket_PC, *after* starting server.py on the PC
import sys, socket, code, time

try:

    HOST = '192.168.0.236'    # The remote host
    PORT = 20000              # The same port as used by the server
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))

    def readfunc(prompt=""):
        if prompt:
            sys.stderr.write(prompt)
        try:
            data = s.recv(1024)
        except EOFError:
            s.close()
        sys.stderr._output.write(data[:-1])
        sys.stderr._output.write("\n")
        return data[:-1]

    class Output(object):
        def __init__(self, output):
            self._output = output
            
        def write(self, text):
            self._output.write(text)
            s.send(text)

    sys.stdout = Output(sys.stdout)
    sys.stderr = Output(sys.stderr)
##    sys.ps1 = "Pocket_PC >>> "
##    sys.ps2 = "Pocket_PC ... "

    banner = "Python %s on %s\n(Remote Console)" % (sys.version, sys.platform)

    # Replace the builtin raw_input (which doesn't work on CE anyway),
    # to make pdb work.
    import __builtin__
    __builtin__.raw_input = readfunc

    code.interact(banner=banner, readfunc=readfunc)

except SystemExit:
    raise
except:
    import traceback
    traceback.print_exc()
    time.sleep(5)
server.py (text/x-python, 670 B)
# Thomas Heller 20060109
# Start this script on the PC, then start client.py on the Pocket PC.
import socket, sys, threading

HOST = ''                 # Symbolic name meaning the local host
PORT = 20000              # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()

def get_input():
    while 1:
        data = raw_input()
        conn.send(data + '\n')

t = threading.Thread(target=get_input)
t.setDaemon(True)
t.start()

while 1:
    data = conn.recv(1024)
    if not data:
        print "SystemExit, hit return to end."
        raise SystemExit
    sys.stderr.write(data)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.