如何在Python中从标准输出中删除行?

3 投票
2 回答
11681 浏览
提问于 2025-04-16 04:15

我有一个程序,它通过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来像这样使用readlines:

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

但是我在这之后就不知道该怎么做了。有什么好的方法吗?我使用的是python 2.6.5。谢谢。

2 个回答

6

如何在Python中从标准输出中删除行?

(这是一个关于如何从标准输出Python控制台窗口中删除行的一般性回答,和具体的问题,比如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,这样才能正常工作。

请注意,这个方法适用于标准输出的Python控制台窗口,比如通过右键点击脚本并选择“用 -> python打开”来运行。它不适用于SciTe、Idle、Eclipse或其他带有内置控制台窗口的编辑器。我自己也在等待一个解决方案,这里有相关信息。

3

readlines 会把所有的数据都读取出来

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

撰写回答