0

telnet で接続してデータを収集する IP アドレスのリストがあります。このデータを 2 つの変数に入れます。次に、変数のデータを HTML テーブルに出力したいと考えています。Python 2 では機能しましたが、Python 3 では機能しませんでした。次のエラーが表示されます: Can't convert 'bytes' object to str implicitly. 他の人がバイトコードと文字列コードについて説明しているのを見ますが、リストはどうですか? できれば助けてください。

#!/usr/bin/python3

import cgi, cgitb
import telnetlib
import re
import socket

user            = 'usr'
password        = 'pwd'

print ("Content-type:text/html\r\n\r\n")
print ("<html>")
print ("<head>")
print ("<title>Locating IP Addresses</title>")
print ("<link href=\"/styles/main.css\" type=\"text/css\" rel=\"stylesheet\" >")
print ("</head>")
print ("<body>")

for count in ["10.1.1.4", "10.1.1.3", "10.1.1.2"]:
    server = (count)
    try:
        tn = telnetlib.Telnet(server)
        tn.read_until(b"ogin")
        tn.write(user.encode('ascii') + b"\r\n")
        tn.read_until(b"assword")
        tn.write(password.encode('ascii') + b"\r\n")
        tn.write(b"environment no more\r\n")
        tn.write(b"configure\r\n")
        tn.write(b"router\r\n")
        tn.write(b"info\r\n")
        tn.write(b"logout\r\n")
        output = (tn.read_all())
        interfaces = (re.findall(b'interface\s\"(.+)\"', output))
        ipaddr = (re.findall(b'address\s(.+)/', output))
        print ("<table>")
        print ("<tr>")
        print ("<th class=\"bld\">%s</th>" % (server))
        print ("</tr>")
        for i,j in zip(interfaces, ipaddr):
            print ("<tr>")
            print (("<td class=\"sn\">"+j+"</td>" "<td class=\"prt\">"+i+"</td>"))

        except socket.error:
            print ("communication error with " + server)

print ("</body>")
print ("</html>")
4

1 に答える 1

0

正規表現でバイトを使用すると、結果もバイトになります。この場合、これはバイトのリストを意味interfacesし、ipaddrリストになります。

後で、演算子を使用してこれらの結果を文字列と連結しようとしますが、と+を混在させることはできません。bytesstr

代わりにこれを試してください:

print("<td class=\"sn\">"+j.decode()+"</td><td class=\"prt\">"+i.decode()+"</td>")
于 2013-04-17T19:45:29.530 に答える