Python - Telnet على أجهزة التوجيه وسرد النتيجة الكاملة (Hitting Space Bar)

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 مرات (يعتمد على المدة التي يتمتع بها سجل السجل) للحصول على سجل كامل- عندما أفعل ذلك كتيب ، ولا أعرف كيف أخبر بيثون سرد السجل الكامل. أي اقتراح؟

هل كانت مفيدة؟

المحلول

ليس حلًا ، ولكن يبدو حلولًا معقولًا:

يمكنك تعطيل الترحيل الطرفي عن طريق إصدار أمر iOS CLI التالي.

طول المحطة 0

نصائح أخرى

إنها في الواقع الإجابة الدقيقة ..... عليك أن تدخل طول الطرف 0 أو صفحات جهاز التوجيه ، مثل استخدام UNIX "أكثر" بحيث يكون قابلاً للقراءة البشرية ولا يتم التمرير إلى ذلك بسرعة إلى بسرعة

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() 

تصبح المشكلة بعد ذلك كيفية التقاط الإخراج أكبر من حوالي 20 كيلو بايت ... عند تسجيل الدخول إلى ملف أحصل على كل الإخراج ولكني أريد فقط حفظ الإخراج الانتقائي ، وليس الجلسة بأكملها. عند استخدام الطفل. بعد اقتطاع الناتج ، على سبيل المثال ، تكون البداية مفقودة والتي يمكن تخفيفها قليلاً عن طريق زيادة الحد الأقصى ولكن لا تزال القنابل عند الانتقال إلى ما يقرب من 30-40 كيلو بايت من الإنتاج.

بالنسبة لأولئك الذين يتساءلون ، أنا أمسك بمخرجات مفاتيح Cisco باستخدام "Protocol Sh | I | الماضي" لا يعيد هذا سوى 3 خطوط لكل واجهة ولكن بعض مداخن مفاتيح العميل لديها 450 منفذ.

لست متأكدًا من ديناميات هنا ولكن بالنسبة لبعض المفاتيح تنجح.

لفترة من الوقت حاولت العمل حول المشكلة عن طريق تحويل التسجيل بشكل انتقائي إلى تقديم وإيقاف تشغيله. لقد أثبت هذا غير موثوق به ومن التسجيل العام ، يمكنني أن أرى أن 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