我需要從設備獲取(解析)其整個輸出。只讀部分已知行 - Python
我的解決辦法是:1)確定其輸出的最後一行看起來像
2)使用下面的代碼讀取輸出,直到最後一行(這大約是一個跟你說 - 讀整輸出)
last_line = "text of the last line"
read_until(last_line)
3)技術細節:使其向get_output()
的return
值作爲進一步傳遞到parse_result()
功能的裝置。
問題是:最後一行可能採取各種形式,只有粗略的格式是已知的。例如,它可能會說:{"diag":"hdd_id", "status":"0"}
。但是,"diag"
和"status"
都可能採用除"hdd_id"
和"0"
之外的其他值。
我能做些什麼來使「最後一行的文本」更具普遍性,以便read_until()針對每個「diag」和「status」值停止? (假設輸出總是包含「diag」和「status」字樣)
我試過了:使用正則表達式。定義last_line = re('"status":"."}')
利用正則表達式中的.
意味着任何值的事實。我得到的是TypeError: 'module' object is not callable
。
把這個正則表達式轉換成字符串str(re('"status":"."}'))
也沒有什麼意義,因爲就我所瞭解的正則表達式而言,它並不意味着任何特定的字符串(由於.
)。
你能發表一些代碼嗎? 'read_until'是一個庫函數還是你自己寫的東西? – tzaman
'read_until'是telnetlib.py的庫函數 - 因爲設備的輸出正通過TelNet連接讀取。這裏是它的定義的基本部分: 'def read_until(self,match,timeout = None): 「」「直到遇到給定的字符串或直到超時爲止.' – Bolo