2010-03-03 9 views
1

Je travaille sur un shell python tcp; Je voudrais être en mesure de telnet à un port, et le faire m'indiquer avec un shell: ex.Comment abandonner un shell bash depuis Python?

$ telnet localhost 5555 
Connected to localhost. 
Escape character is '^]'. 
$ 

La réponse ci-dessous a été très utile pour me mettre sur la bonne voie. Voici le code de travail.

import SocketServer, os, subprocess 
class EchoRequestHandler(SocketServer.BaseRequestHandler): 
    def setup(self): 
     print self.client_address, 'connected!' 
     self.request.send(str(self.client_address) + '\n') 
     self.request.send(os.system('sh')) 
    def handle(self): 
     data = 'dummy' 
     while data: 
      data = self.request.recv(1024) 
      self.request.send(os.popen(data.strip()).read()) 
      if data.strip() == 'bye': 
       return 

    def finish(self): 
     print self.client_address, 'disconnected!' 
     self.request.send('bye ' + str(self.client_address) + '\n') 

server = SocketServer.ThreadingTCPServer(('', 7784), EchoRequestHandler) 
server.serve_forever() 
+1

1. Qu'est-ce qui se passe si vous exécutez "/ bin/tcsh" de votre ligne de commande shell? 2. tcsh! = Bash. bash peut être dans/bin/bash. run 'which bash' – Paul

+0

@Paul: Ce n'est pas à cause du "mauvais" shell en cours d'exécution. C'est parce que «popen» n'est pas le bon outil pour faire quoi que ce soit d'interactif, comme un shell interactif. –

+0

Pourriez-vous obtenir une ligne de commande python >>> et une invite de shell en même temps? – Paul

Répondre

6
import os 
os.system('sh') # or bash, tcsh, zsh, whatever. :-P 
Questions connexes