2010-03-03 4 views
1

나는 파이썬 TCP 셸에서 일하고있다; telnet으로 포트에 연결하고 쉘을 사용하여 프롬프트를 표시하고 싶습니다. 예.파이썬에서 bash 쉘을 제거하려면 어떻게해야합니까?

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

내 대답을 얻는 데 큰 도움이되었습니다. 여기에 작동 코드가 있습니다.

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. 당신이 당신의 쉘 명령 행에서 "/ 빈/tcsh의"를 실행하면 어떻게됩니까? 2. tcsh! = bash. bash는/bin/bash에있을 수 있습니다. run 'which bash' – Paul

+0

@Paul : "잘못된"쉘이 실행 되었기 때문이 아닙니다. 왜냐하면'popen'은 대화 형 셸과 같은 대화 형 작업을 수행하는 올바른 도구가 아니기 때문입니다. –

+0

파이썬 커맨드 라인 >>>과 쉘 프롬프트를 동시에 얻을 수 있습니까? – Paul

답변

6
import os 
os.system('sh') # or bash, tcsh, zsh, whatever. :-P 
관련 문제