bugfix> python > 投稿

IBM as400ボックス用のtelnetクライアントで作業していますが、適切な量のデータが返されないという問題に遭遇しました。最初に、プログラムは書き込み先のユーザー名とパスワードフィールドを持つtelnetセッションに接続し、従業員にデータの入力、データベースへのアクセスなどを許可するユーザーシェルに移動する必要があります。 read_very_eager を呼び出すときログイン後のセッションだけでなく、ログイン画面とログイン後のセッションで満たされたバッファーを返します。なぜこれが起こるのか、その他の read_xyz また、メソッドは何も印刷しないか、ログイン画面の最初の数バイトだけでバッファがいっぱいになります。私のコードは次のとおりです(機密データは省略されます):

def login():
    tn = telnetlib.Telnet(host, port)
    sleep(1)
    tn.write(username + "\t")
    tn.write(password + "\r\n")
    sleep(1)
    data = tn.read_very_eager()
    print data
def main():
    print "started"
    login()
main()

回答 1 件
  • 回答を送信する前に、ログインとパスワードのプロンプトを読んでください。それ以外の場合は、ストリームに保持され、次の読み取り呼び出しで読み取られます。

    tn.read_some()
    tn.write(username + "\t")
    tn.read_some()
    tn.write(password + "\r\n")
    data = tn.read_some()
    
    

    そして、 read_some() を使用します   read_very_eager() の代わりに  最初に寝る必要はありません。何かが利用可能になるのを待ってから、そこにあるものをすべて返します。

あなたの答え