python Socket Server

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/python-socket-server_237031/page_1 - zur Vollversion wechseln!


Moesli schrieb am 05.12.2013 um 12:49

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


issue schrieb am 05.12.2013 um 13:10

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 schrieb am 05.12.2013 um 13:47

macht ma das nicht heutzutage mit subprocess.check_output() statt .Popen()? http://docs.python.org/2/library/su...bprocess-module


Moesli schrieb am 05.12.2013 um 13:47

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 schrieb am 05.12.2013 um 13:57

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 schrieb am 05.12.2013 um 14:54

@Taltos: perfekt :) - vielen Dank, das wars ;)


Taltos schrieb am 05.12.2013 um 15:34

bitte :-)




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025