2012-06-08 92 views
10

所以我想用python文檔給出的這個非常簡單的例子:telnetlib蟒蛇例如

import getpass 
import sys 
import telnetlib 

HOST = "<HOST_IP>" 
user = raw_input("Enter your remote account: ") 
password = getpass.getpass() 

tn = telnetlib.Telnet(HOST) 

tn.read_until("login: ") 
tn.write(user + "\n") 
if password: 
    tn.read_until("Password: ") 
    tn.write(password + "\n") 

tn.write("ls\n") 
tn.write("exit\n") 
print tn.read_all() 

我的問題是,它掛在read_all()結束......未打印什麼都沒有。我之前從未使用過這個模塊,所以我試圖在繼續之前得到這個基本的例子。順便說一句,我使用Python 2.4 謝謝。

回答

8

好的,我找到了一個解決方案。在我輸入ls並退出之前,我需要先指定終端類型。加入

tn.write("vt100\n") 

之前的「ls」爲我解決了問題。

+0

我們鼓勵您自己給出答案,因爲這可以幫助其他人解決這個問題 – Mawg

2

我沒有telnet服務器來測試,但我認爲問題在於,在每次寫入命令後,您都沒有閱讀服務器響應,直到提示符。

PROMPT = ':~$' 
tn = telnetlib.Telnet(HOST) 
tn.read_until('login: ') 
tn.write(user + '\n') 
if password: 
    tn.read_until('Password: ') 
    tn.write(password + '\n') 
tn.read_until(PROMPT) 
tn.write('ls\n') 
print tn.read_until(PROMPT) 
tn.write('exit\n') 

btw,telnetnetlib可能會非常棘手,而且事情因您的FTP服務器和環境設置而異。你可能會更願意考慮像pexpect這樣通過telnet自動登錄和用戶交互。

+0

您能解釋一下爲什麼我們需要最終在這裏退出tn.write('exit \ n')? – qre0ct

6

如果你使用的是Windows,確保新行字符前加回車(\r):

tn.write(user.encode('ascii') + "\r\n".encode('ascii')) 
0

我掙扎試圖寫入SynAccess電源板一段時間。這是我做到這一點:

import sys 
import telnetlib 
HOST = < your SynAccess switch ip address > 
user = < user name > 
password = <password> 

tn = telnetlib.Telnet(HOST, 23, 5) 
tn.write("login\r\n") 
tn.write(user + "\r\n") 
tn.write(password + "\r\n") 
tn.write("rb 3\r\n") # this reboots plug 3 
tn.write("rb 1\r\n") # this reboots plug 1 
tn.write("logout\r\n") 
tn.close 
1

我知道這是遲到,但可能會幫助其他人。我也努力做到這一點,但這是我的一段代碼。我的遠程登錄會遵循一定的流程,就像它會要求loginID然後Password然後你必須等待一個特定的字符串顯示在這裏,對於我的情況是"DB>",那麼你可以繼續使用命令和全部。我的輸出將被保存在"out" varible

import os,re,telnetlib 
host = "10.xxx.xxx.xxx" 
port = 23 

telnet = telnetlib.Telnet() 
telnet.open(host, port) 
telnet.write('loginID\r\n') 
telnet.write('Password\r\n') 
out = telnet.read_until("DB>", 5) 
telnet.write('show cable modem reg\r\n') #Mycommand 
out = telnet.read_until("DB>", 5) 
telnet.write('quit\r\n') 
telnet.close() 

對於更多的變化和幫助,請瀏覽網站nullege

0

使用Python 2.7或使用更高版本的「(」「),」在最後一行