如何在Python中从标准输出中删除行?
我有一个程序,它通过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:])