9

Python の telnetlib を使用して一部のマシンに telnet で接続し、いくつかのコマンドを実行していますが、これらのコマンドの出力を取得したいと考えています。

それで、現在のシナリオは何ですか -

tn = telnetlib.Telnet(HOST)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
    tn.read_until("Password: ")
    tn.write(password + "\n")

tn.write("command1")
tn.write("command2")
tn.write("command3")
tn.write("command4")
tn.write("exit\n")

sess_op = tn.read_all()
print sess_op
#here I get the whole output

これで、sess_op で統合されたすべての出力を取得できます。

しかし、私が望むのは、ここに示すように、他のマシンのシェルで作業しているかのように、command1 の実行直後と command2 の実行前に出力を取得することです -

tn = telnetlib.Telnet(HOST)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
    tn.read_until("Password: ")
    tn.write(password + "\n")

tn.write("command1")
#here I want to get the output for command1
tn.write("command2")
#here I want to get the output for command2
tn.write("command3")
tn.write("command4")
tn.write("exit\n")

sess_op = tn.read_all()
print sess_op
4

3 に答える 3

10

telnetlib を使用しているときに、似たようなことがありました。

次に、各コマンドの末尾にキャリッジ リターンと改行がないことに気付き、すべてのコマンドに対して read_eager を実行しました。このようなもの:

 tn = telnetlib.Telnet(HOST, PORT)
 tn.read_until("login: ")
 tn.write(user + "\r\n")
 tn.read_until("password: ")
 tn.write(password + "\r\n")

 tn.write("command1\r\n")
 ret1 = tn.read_eager()
 print ret1 #or use however you want
 tn.write("command2\r\n")
 print tn.read_eager()
 ... and so on

次のようなコマンドを書くだけではなく、

 tn.write("command1")
 print tn.read_eager()

「\n」だけで機能する場合は、「\r\n」の代わりに「\n」を追加するだけで十分かもしれませんが、私の場合は「\r\n」を使用する必要がありました。まだ新しい行だけで試してみました。

于 2012-05-10T18:05:09.663 に答える
4

ここtelnetlibでモジュールのドキュメントを参照する必要があります。 これを試して -

tn = telnetlib.Telnet(HOST)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
    tn.read_until("Password: ")
    tn.write(password + "\n")

tn.write("command1")
print tn.read_eager()
tn.write("command2")
print tn.read_eager()
tn.write("command3")
print tn.read_eager()
tn.write("command4")
print tn.read_eager()
tn.write("exit\n")

sess_op = tn.read_all()
print sess_op
于 2012-04-12T15:24:30.060 に答える