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)

edit の代わりにsys.stdout.write(msg); sys.stdout.flush()、使用することもできます

print(msg, end='')

3.0 より前の Python バージョンfrom __future__ import print_functionでは、これを機能させるためにスクリプト/モジュールの先頭に置きます。

このソリューションは標準出力の Python コンソール ウィンドウで機能することに注意してください。たとえば、右クリックして [open with -> 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 に答える