如何从python中的stdout中删除行?

时间:2010-09-17 05:52:18

标签: python paramiko

我有一个使用paramiko通过ssh抓取一些数据的程序:

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中删除前4行。我已经尝试使用StringIO来使用这样的读取行:

output = StringIO("".join(ssh_stdout_host))
data_all = output.readlines()

但是在此之后我迷失了。什么是好方法?我使用python 2.6.5。感谢。

2 个答案:

答案 0 :(得分:3)

如何从python中的stdout中删除行?

(这是从stdout Python控制台窗口中删除行的一般答案,与涉及paramiko,ssh等的特定问题无关)

另请参阅:herehere

使用printprint()结合使用,而不是使用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='')

对于3.0以下的Python版本,将from __future__ import print_function放在脚本/模块的顶部以使其正常工作。

请注意,此解决方案适用于stdout Python控制台窗口,例如通过右键单击并选择'打开方式 - >来运行脚本;蟒蛇'。它不适用于包含控制台窗口的SciTe,Idle,Eclipse或其他编辑器。我正在等待here的解决方案。

答案 1 :(得分:2)

readlines提供所有数据

allLines = [line for line in stdout.readlines()]
data_no_firstfour = "\n".join(allLines[4:])