2011-06-16 119 views
0

我在python中使用telnetlib ... 我使用'\ r'作爲輸入鍵,'T'作爲TAB。 與此場景相同,我希望按住SHIFT,PAGE UP,PAGE DOWN,F1,F2 ... F12的字符序列。 請幫我解決這個問題,因爲我必須在我的代碼中使用所有這些鍵盤鍵。python中的所有鍵盤按鍵的轉義序列

import telnetlib 

HOST = "localhost" 
user = raw_input("Enter your remote account: ") 
password = getpass.getpass() 

tn = telnetlib.Telnet(HOST) 

tn.write("ls\n") 
tn.write("exit\n") 
tn.write("\r") #this is for enter 
tn.write("\t") # this is for tab 

#what should be here to other keys..pls 

print tn.read_all() 
+0

'\ r' 表示ASCII回車符('LEN( 「\ r」)'爲1)。沒有其他鍵的字符,所以你需要計算出服務器期望的字節序列。 Shift是一個修飾鍵,即Shift-a產生一個'A'字節,但是自己移位不會做任何事情。 – 2011-06-16 11:59:45

+0

我得到了關鍵f4 ='\ x1b4',f3 = \ x1b3,f5 = \ x1b5,f6 = \ x1b6的值,但是我無法得到這個值的邏輯@ Thomas K:服務器期望有一個「shift + F1」鍵,如何知道使用這個「shift + F1」事件產生了什麼字節序列? – 2011-06-16 12:31:09

回答

0

不幸的是,並非所有按鍵都會導致通過導線發送一個或多個字節。這實際上是關於終端仿真,因爲控制鍵是「意味着」被終端設備(或仿真器)解釋。

不同的終端類型定義了不同的鍵並將它們映射到流中的不同字節值。例如,一些終端有F11和F12,有些終端則沒有。有些定義了Ctrl + F鍵,Shift + F鍵,Alt + F鍵,Command + F鍵;別人不會。不同的終端通過線路將這些密鑰映射到完全不同的字節序列。當涉及到箭頭鍵和光標模式鍵(如插入)時,問題是相同的。

您可能會發現某些按鍵被客戶端捕獲並根本沒有傳輸,或者非鍵盤事件(例如用鼠標調整終端窗口大小)傳輸終端轉義序列。

+0

感謝您的詳細說明,但我真的被困在這裏,我不能得到如何找到Shift + F1.i的字節序列。我得到了這兩個鏈接更多的KT,我得到了像F這樣的鍵!到F12但仍然不能轉換SHIFT + F1.or說我沒有得到它的邏輯..鏈接。 http://www.asciitable.com/和http://coding.derkeiler.com/pdf/Archive/C_CPP/comp.lang.c/2006-04/msg02566.pdf – 2011-06-17 05:50:36

+0

Shift + F1可能被終端捕獲程序甚至是桌面環境,並且根本不傳輸。如果您添加一個跟蹤報告接收到的每個字節,然後嘗試Shift + F1,您將看到什麼字節序列(如果有)與其對應。你什麼也看不到。確切的字節順序將取決於正在模擬的終端類型。 – wberry 2011-06-17 14:03:47

+0

此外,如果您根據您觀察到的特定字節序列對您的解決方案進行編碼,則當其他用戶使用不同的終端類型嘗試使用您的應用程序時,您的代碼將會爆炸。 – wberry 2011-06-17 14:05:30