"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

python Socket Server

Moesli 05.12.2013 - 12:49 2185 6
Posts

Moesli

goes Linux
Avatar
Registered: Sep 2002
Location: Salzburg
Posts: 1328
ich bräuchte Hilfe in Python, ich habe hier einen Socket Server:

Code:
import SocketServer
import os
class MyTCPHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        while 1:
                        self.data = self.request.recv(1024).strip()
                        if not self.data: break
                        print "{} wrote:".format(self.client_address[0])
                        print self.data
                        os.popen('./send %s' % self.data)
                        self.request.sendall('100')
if __name__ == "__main__":
    HOST, PORT = "", 54321
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
    server.serve_forever()

nun bräuchte ich noch eine "read" Abfrage, der bash script "send" gibt zb: echo TEST aus. Diese Ausgabe soll an den verbundenen Socket-Client übergeben werden. Hab jetzt schon einiges ausprobiert, leider ohne Erfolg(broken pipes, etc.....)

aktuell:

Code:
Connected to localhost.
Escape character is '^]'.
hello
100
Connection closed by foreign host

ich hätte gerne:

Code:
Connected to localhost.
Escape character is '^]'.
hello
Output from shell script
100
Connection closed by foreign host
Bearbeitet von Moesli am 05.12.2013, 14:54

issue

Rock and Stone, brother!
Avatar
Registered: Feb 2003
Location: Linz
Posts: 3603
Du willst den output von deinem script zu jedem Client echo'n?
Code:
import subprocess
proc = subprocess.Popen("deinscript.sh", stdout = subprocess.PIPE)
out, err = proc.communicate()
Out musst du dann halt noch behandeln.
Sollte funktionieren, allerdings jetzt nicht getestet.

Taltos

Here to stay
Avatar
Registered: Jan 2004
Location: Wien
Posts: 1520
macht ma das nicht heutzutage mit subprocess.check_output() statt .Popen()? http://docs.python.org/2/library/su...bprocess-module

Moesli

goes Linux
Avatar
Registered: Sep 2002
Location: Salzburg
Posts: 1328
eigentlich möchte ich nur

den output von
os.popen('./send %s' % self.data)

echo`n an den "fragenden" Client, sofern dies möglich ist.

Taltos

Here to stay
Avatar
Registered: Jan 2004
Location: Wien
Posts: 1520
wie gesagt, subprocess.check_output sollte das tun.
zu os.popen meinen die python docs übrigens: Deprecated since version 2.6: This function is obsolete. Use the subprocess module. Check especially the Replacing Older Functions with the subprocess Module section.
http://docs.python.org/2/library/os...object-creation

btw, os.popen liefert dir ein file object zurück, von dem du lesen kannst, da sollte dann auch der output drinstehen. solltest du unbedingt os.popen verwenden wollen, sollte dir
Code:
fobj = os.popen('./send %s' % self.data)
self.request.sendall(fobj.readlines())
fobj.close()
oder so ähnlich weiterhelfen. (untested)

Moesli

goes Linux
Avatar
Registered: Sep 2002
Location: Salzburg
Posts: 1328
@Taltos: perfekt :) - vielen Dank, das wars ;)

Taltos

Here to stay
Avatar
Registered: Jan 2004
Location: Wien
Posts: 1520
bitte :-)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz