2016-12-20 13 views
1

ちょっと初めて質問アスカーが、これは私は基本的にこの場合のtelnet でbashコマンドを使用するようにしようとしているのpython scirptを持って正しい形式pythonのプロセススクリプトが直接bashコマンドと同じ答えを返していません

であると思いますこれはスクリプト

import subprocess 

proc = subprocess.Popen(['/bin/bash'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
stdout = proc.communicate('telnet 192.168.1.67 5555') 
print (stdout) 

である私は私の他のマシンがポート5555でリッスン でスクリプトを持っているし、bashでスクリプトを呼び出すと、

Connection closed by foreign host. 
("Trying 192.168.1.67...\nConnected to 192.168.1.67.\nEscape character is '^]'.\n", None 
を返します。

と私の他のコンピュータが接続を認識するが、私は、コマンド

telnet 192.168.1.67 5555 

を実行すると、それは

私の質問は、私はスクリプトを書く方法で正常に動作し、接続を開いたままにしながら、それはすぐに 接続を閉じますコマンド "telnet 192.168.1.67 5555"と同じことを行い、接続を開いたままにしますか?

答えて

0

あなたはsocket週間ほどのPythonモジュールを参照してくださいsocket — Low-level networking interfac

を使用することができます。

Pythonの2例:

import socket, select, string, sys 

if(len(sys.argv) < 3) : 
    print 'Usage : python telnet.py hostname port' 
    sys.exit() 

host = sys.argv[1] 
port = int(sys.argv[2]) 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.settimeout(2) 

# connect to remote host 
try : 
    s.connect((host, port)) 
except : 
    print 'Unable to connect' 
    sys.exit() 

print 'Connected to remote host' 

while 1: 
    socket_list = [sys.stdin, s] 

    # Get the list sockets which are readable 
    read_sockets, write_sockets, error_sockets = select.select(socket_list , [], []) 

    for sock in read_sockets: 
     #incoming message from remote server 
     if sock == s: 
      data = sock.recv(4096) 
      if not data : 
       print 'Connection closed' 
       sys.exit() 
      else : 
       #print data 
       sys.stdout.write(data) 

     #user entered a message 
     else : 
      msg = sys.stdin.readline() 
      s.send(msg) 
関連する問題