16

だから私はpython docsで与えられたこの本当に簡単な例を試しています:

import getpass
import sys
import telnetlib

HOST = "<HOST_IP>"
user = raw_input("Enter your remote account: ")
password = getpass.getpass()

tn = telnetlib.Telnet(HOST)

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

tn.write("ls\n")
tn.write("exit\n")
print tn.read_all()

私の問題は、read_all() の最後でハングすることです...何も出力されません。私はこれまでこのモジュールを使用したことがないので、続行する前に、この非常に基本的な例を機能させようとしています。ところで、私はpython 2.4を使用していますありがとう。

4

7 に答える 7

15

さて、私は解決策を見つけました。ls を入力して終了する前に、まず端末の種類を指定する必要がありました。追加する

tn.write("vt100\n") 

「ls」が問題を解決する前に。

于 2012-06-08T16:37:04.060 に答える
6

Windows を使用している場合は、\r改行文字の前に必ずキャリッジ リターン ( )を追加してください。

tn.write(user.encode('ascii') + "\r\n".encode('ascii'))
于 2013-08-29T11:18:19.590 に答える
3

テストするtelnetサーバーはありませんが、問題は、コマンドを記述するたびに、プロンプトまでサーバーの応答を読み取っていないことだと思います。

PROMPT = ':~$'
tn = telnetlib.Telnet(HOST)
tn.read_until('login: ')
tn.write(user + '\n')
if password:
   tn.read_until('Password: ')
   tn.write(password + '\n')
tn.read_until(PROMPT)
tn.write('ls\n')
print tn.read_until(PROMPT)
tn.write('exit\n')

ところで、telnetnetlib は扱いにくい場合があり、FTP サーバーと環境の設定によって状況が異なります。pexpectのようなものを調べて、telnet を介したログインとユーザーの対話を自動化する方がよいかもしれません。

于 2012-06-08T16:41:57.560 に答える