如何在python中从stdout删除行?

2024-04-29 15:04:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个程序使用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-u主机删除前4行。我试过使用StringIO来使用这样的readlines:

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

但这之后我迷路了。什么是一个好的方法?我使用的是Python2.6.5。谢谢。


Tags: 数据程序iphostparamikooutputservermain
2条回答

如何在python中从stdout删除行?

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

另请参见:herehere

不要使用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='')

对于低于3.0的Python版本,将from __future__ import print_function放在脚本/模块的顶部,这样可以工作。

注意,此解决方案适用于stdout Python控制台窗口,例如,通过右键单击并选择“open with->;Python”来运行脚本。它不适用于SciTe、Idle、Eclipse或其他带有合并控制台窗口的编辑器。我在等一个解决方案。

readlines提供所有数据

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

相关问题 更多 >