1

telnet を使用し、ログインが必要なコードがあります。ログインが正しくない場合、コンソールに「正しくないログイン」が返されます。プログラムが停止しないように、この例外をキャッチしてスキップしたいと考えています。私が試したことは以下の通りです:

try:
    session.write("username".encode('ascii') + b"\r")
    session.write("password".encode('ascii') + b"\r")
    ***this is the point where the console will return "Incorrect login"***
except sys.stdout == "Incorrect login":
    print(sys.stdout)
    pass
else:
    **Rest of the code**

この出力をキャッチすることはなく、コードに進み、最終的にインデックス エラーが発生するようです (ログインに必要なデータがないため)。検索してみましたが、運がありませんでした。どんな助けでも大歓迎です。私はpython 3.3を実行していますが、まだ学習中です。ありがとう!

編集:telnetが示すものは次のとおりです

login: badusername
password: **blank b/c it is a pw field**
Login incorrect

login: 

Edit2: その他までのすべてのコード (機密保持のために編集)

import telnetlib, time
import sys, string, socket
import cx_Oracle

sql = "select column from table" 
con = cx_Oracle.connect("login info blah...")
cur = con.cursor()
cur.execute(sql)
row = cur.fetchone()
rows = cur.fetchall()

def Tup():
    return (rows)

cur.close()
con.close()

i = 0

while i < len(rows):   
    host    = Tup()[i][0]
    timeout = 120
    print(host + ' =', end = ' ')
    try:
        session = telnetlib.Telnet(host, 23, timeout)
    except:
        out = open("Data.txt",'a')
        out.write(host + " = FAILED\n")
        print("FAILED")
    else:        
    try:
        session.write("username".encode('ascii') + b"\r")
        session.write("pass".encode('ascii') + b"\r")
    except sys.stdout == "Incorrect login":
        print(sys.stdout)
        pass
    else:
4

3 に答える 3

2

[subprocess][1]モジュールを調べるcheck_outputと、実行されたコマンドの出力を文字列として返すメソッドが含まれています。

これを試して。構文の詳細を変更する必要があるかもしれません...

PROMPT = '$' # or '#' or '%', the shell prompt
TIMEOUT = 3

try:
    session.read_until(b"login:")
    session.write("username".encode('ascii') + b"\r")

    session.read_until(b"password:")
    session.write("password".encode('ascii') + b"\r")
    login_result = session.read_until(PROMPT, TIMEOUT) # This will make it put whatever is printed till PROMPT into login_result. if it takes more than TIMEOUT seconds, you can assume login failed (since PROMPT never came up)
    ***this is the point where the console will return "Incorrect login"***

    if(login_result[-1] != PROMPT):    # change this -1 to -2 or -3 if the output is trailed by a newline
        raise Exception

except Exception:
    print("Login Failure")
    pass

else:
    **Rest of the code**
于 2013-05-02T15:16:41.263 に答える