python Socket Server
Moesli 05.12.2013 - 12:49 2241 6
Moesli
goes Linux
|
ich bräuchte Hilfe in Python, ich habe hier einen Socket Server: 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: Connected to localhost.
Escape character is '^]'.
hello
100
Connection closed by foreign host
ich hätte gerne: 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!
|
Du willst den output von deinem script zu jedem Client echo'n? 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
|
|
Moesli
goes Linux
|
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
|
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-creationbtw, 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 fobj = os.popen('./send %s' % self.data)
self.request.sendall(fobj.readlines())
fobj.close()
oder so ähnlich weiterhelfen. (untested)
|
Moesli
goes Linux
|
@Taltos: perfekt - vielen Dank, das wars
|
Taltos
Here to stay
|
bitte :-)
|