2

我有一个使用 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 来使用这样的 readlines:

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

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

4

2 回答 2

5

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

(这是从标准输出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='')

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

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

于 2011-07-24T01:35:43.733 回答
2

readlines 提供所有数据

allLines = [line for line in stdout.readlines()]
data_no_firstfour = "\n".join(allLines[4:])
于 2010-09-17T05:58:39.647 回答