Python -RutersのTelnetと完全な結果を一覧表示(宇宙バーを打つ)

StackOverflow https://stackoverflow.com/questions/3690606

  •  02-10-2019
  •  | 
  •  

質問

import telnetlib

def telNetCall():
    host  = "10.200.1.23"
    user  = "me"
    password = "matrix"
    telnet  = telnetlib.Telnet(host) 
    telnet.read_until('Username: ', 3) 
    telnet.write(user + '\r')
    telnet.read_until('Password: ', 3)  
    telnet.write(password + '\r') 
    telnet.write("sh log"+ "\r\n")
    telnet.write('exit' + '\r')
    print telnet.read_all() 

私の問題は、Ciscoルーターから「ログを表示する」をつかもうとすると、部分的な結果が得られることです。フルログを取得するには、スペースバーを5回(ログ履歴の長さに依存する)必要があるからです。マニュアルを行うと、完全なログをリストするようにPythonに伝える方法がわかりません。なにか提案を?

役に立ちましたか?

解決

解決策ではありませんが、もっともらしい回避策のようです。

次のiOSCLIコマンドを発行することにより、端末ページを無効にできます。

端子長0

他のヒント

実際には正確な答えです.....端子長0またはルーターページを入力する必要があります。Unix「more」を使用するように出力を使用する必要があります。

import telnetlib

def telNetCall():
    host  = "10.200.1.23"
    user  = "me"
    password = "matrix"
    telnet  = telnetlib.Telnet(host) 
    telnet.read_until('Username: ', 3) 
    telnet.write(user + '\r')
    telnet.read_until('Password: ', 3)  
    telnet.write(password + '\r') 

    telnet.write("term length 0"+ "\r\n")

    telnet.write("sh log"+ "\r\n")
    telnet.write('exit' + '\r')
    print telnet.read_all() 

問題は、約20kbを超える出力をキャプチャする方法になります...ファイルにログするときは、すべての出力を取得しますが、セッション全体ではなく、選択的な出力を保存するだけです。 child.を使用すると、出力が切り捨てられた場合、例えば、Maxreadを増やすことで少し緩和できる開始が欠落していますが、30〜40kb近くの出力を取得すると爆弾が発生します。

不思議に思う人のために、「sh int | i protocol | last」を使用してCiscoスイッチの出力をつかんでいます。

ここにダイナミクスが何であるかはわかりませんが、一部のスイッチでは成功します。

しばらくの間、ログを選択してオンとオフに提出することで、問題を回避しようとしました。これは信頼できないことが判明し、一般的なロギングから、ロギングが表示される前にPEXpectが出力と一致することがわかります。データがまだファイルに書かれている間にログを無効にすることになりました。約10行の出力後に出力を切り捨てます。

したがって、究極の質問は残っており、どのようにして子供の信頼性を高めることができますか。大きな出力をキャプチャするため。出力が信頼できる限り、予想ステートメントのタイムアウトを増やすことに問題はありません。私が今見ているのは、不完全な出力のタイムアウトではありません。

child.sendline(action)
child.expect(prompt_keys)
action_output = str(child.after)    # Captures the output
# print action_output   # Uncomment for debugging grabbed output
output_file.write(action_output + "\n\n\n") # Write the output to file
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top