كيفية إزالة الخطوط من stdout في بيثون؟
سؤال
لدي برنامج يمسك ببعض البيانات من خلال SSH باستخدام Paramiko:
ssh = paramiko.SSHClient()
ssh.connect(main.Server_IP, username=main.Username, password=main.Password)
ssh_stdin_host, ssh_stdout_host, ssh_stderr_host =ssh_session.exec_command(setting.GetHostData)
أرغب في إزالة الأسطر الأربعة الأولى من SSH_STDOUT_HOST. لقد حاولت استخدام Stringio لاستخدام خطوط القراءة مثل هذا:
output = StringIO("".join(ssh_stdout_host))
data_all = output.readlines()
لكني ضاعت بعد هذا. ماذا سيكون نهجا جيدا؟ أنا أستخدم بيثون 2.6.5. شكرًا.
المحلول
يوفر القراءة جميع البيانات
allLines = [line for line in stdout.readlines()]
data_no_firstfour = "\n".join(allLines[4:])
نصائح أخرى
كيفية إزالة الخطوط من stdout في بيثون؟
(هذه إجابة عامة لإزالة الخطوط من stdout نافذة وحدة التحكم بيثون, وليس له علاقة بسؤال محدد يتضمن paramiko ، ssh إلخ)
بدلا من استخدام print
أمر أو print()
وظيفة ، استخدام sys.stdout.write("...")
مدموج مع sys.stdout.flush()
. لمحو الخط المكتوب ، انتقل إلى "العودة إلى السطر السابق" والكتابة فوق جميع الأحرف عن طريق المساحات باستخدام sys.stdout.write('\r'+' '*n)
, ، أين n
هو عدد الأحرف في السطر.
مثال لطيف يقول كل شيء:
import sys, time
print ('And now for something completely different ...')
time.sleep(0.5)
msg = 'I am going to erase this line from the console window.'
sys.stdout.write(msg); sys.stdout.flush()
time.sleep(1)
sys.stdout.write('\r' + ' '*len(msg))
sys.stdout.flush()
time.sleep(0.5)
print('\rdid I succeed?')
time.sleep(1)
تعديلبدلاً من sys.stdout.write(msg); sys.stdout.flush()
, ، يمكنك أيضا استخدام
print(msg, end='')
لإصدارات Python أدناه 3.0 ، ضع from __future__ import print_function
في الجزء العلوي من البرنامج النصي/الوحدة النمطية لكي يعمل هذا.
لاحظ أن هذا الحل يعمل مع نافذة Console Stdout Python ، على سبيل المثال قم بتشغيل البرنامج النصي بالنقر بزر الماوس الأيمن واختيار "Open with -> Python". لا يعمل مع Scite أو الخمول أو الكسوف أو المحررين الآخرين مع نوافذ وحدة التحكم المدمجة. أنا في انتظار حل لذلك هنا.