[python] Client+Server - povodne: subprocess, pipes

RMiklos na pss.sk RMiklos na pss.sk
Čtvrtek Říjen 11 09:38:06 CEST 2007


>Já bych ale potřeboval,
>aby se "server" nezapínal jako podproces, ale aby například oba
>programy zapnul uživatel a oni se sami poznaly a začaly spolu
>komunikovat.

Tak to urob ako client-server. Uzivatel spusti server, spusti client, 
server prijme data od klienta a vrati mu data.

Tu je maly priklad, ktory som si odlozil - najdes ho niekde na webe: 
Server prijima data od clienta, transformuje ich na uppercase a posiela 
naspat clientovi.

--------------------------- server.py ------------------------
#!/usr/bin/env python

"""
A simple echo server
"""

import socket, string 

host = ''
port = 50000
backlog = 5
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(backlog)
while 1:
    client, address = s.accept()
    data = client.recv(size)
    if data:
        print "Receiving data from client: %s" % data
        data = string.upper(data)
        print "Sending data to client    : %s" % data
        client.send(data)
    client.close()

--------------------------- client.py ---------------------------
#!/usr/bin/env python

"""
A simple echo client
"""

import socket

host = 'localhost'
port = 50000
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
data = 'Hello, world'
print "Sending data to server    : %s" % data
s.send(data)
data = s.recv(size)
print 'Receiving data from server: %s' % data
s.close()






Koumes21 <koumes21 na gmail.com> 
Sent by: python-bounces na py.cz
10.10.2007 21:02
Please respond to
Konference PyCZ <python na py.cz>


To
"Konference PyCZ" <python na py.cz>
cc

Subject
[python] subprocess, pipes






Dobrý den, 
udělal jsem si dva jednoducé prográmky abych si vyzkouše
komunikaci mezi procesy. Jeden z nich jednoduše vypisuje to, co do něj 
napíšete: 

import sys 

while 1: 
    c1=sys.stdin.read(1) 
    sys.stdout.write(c1) 
    sys.stdout.flush() 

Tento první jsem změnil na exe soubor modulem py2exe. 
Druhý program spustí ten první a posílá do něj to co uživatel
napíše a to co se vrátí tiskne na obrazovku: 

import subprocess,sys,thread 

pipe = subprocess.Popen("server.exe",
stdin=subprocess.PIPE,
stdout=subprocess.PIPE) 

def reciever(): 
    while 1: 
        c1=pipe.stdout.read(1) 
        sys.stdout.write(c1) 

thread.start_new(reciever,()) 

while 1: 
....c1=sys.stdin.read(1) 
....pipe.stdin.write(c1) 

Je mi jasné, že program není ještě dokončený, ale jde o princip.
V tomto okamžiku vše správně funguje. Já bych ale potřeboval,
aby se "server" nezapínal jako podproces, ale aby například oba
programy zapnul uživatel a oni se sami poznaly a začaly spolu
komunikovat. Kdyby někdo věděl a poradil mi, budu mu jistě vděčný. 

Koumes21_______________________________________________
Python mailing list
Python na py.cz
http://www.py.cz/mailman/listinfo/python

Mgr. Ing. Roman MIKLÓŠ 
Prvá stavebná sporiteľňa a.s. 
Bajkalská 30, P. O. Box 48 
829 48  Bratislava 25 
Tel.: +421/ 2 / 582 31 174 
Fax: +421/ 2 / 582 31 109 



Další informace o konferenci Python