Python错误处理和连接错误
我正在使用Telnet客户端。我开始在我的笔记本上编写代码(Windows),并在完成时将其上传到我的服务器(Debian)。这两个系统都适用于Python 3.在我的笔记本中,脚本运行良好,但在Debian上,它确实出错。Python错误处理和连接错误
验证码:
import telnetlib
import sys
try:
HOST = sys.argv[1]
user = sys.argv[3]
password = sys.argv[4]
cmd= sys.argv[5]
port=int(sys.argv[2])
tn = telnetlib.Telnet(HOST, port)
tn.read_until(b"username: ")
tn.write(user.encode('ascii') + b"\n")
if password:
tn.read_until(b"password: ")
tn.write(password.encode('ascii') + b"\n")
tn.write(cmd.encode('ascii') + b"\n")
except ConnectionRefusedError:
print('ERROR')
else:
print('OK')
服务器(CraftBukkit服务器RemoteToolKit):
Mar 05, 2014 12:39:58 PM net.wimpi.telnetd.net.ConnectionManager makeConnection
INFO: connection #1 made.
Unexpected error in shell!
java.net.SocketException: Connection reset
> at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:118)
> at java.net.SocketOutputStream.write(SocketOutputStream.java:159)
> at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
> at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
> at java.io.DataOutputStream.flush(DataOutputStream.java:123)
> at net.wimpi.telnetd.io.TelnetIO.flush(Unknown Source)
> at net.wimpi.telnetd.io.TerminalIO.flush(Unknown Source)
> at net.wimpi.telnetd.io.TerminalIO.write(Unknown Source)
> at com.drdanick.McRKit.Telnet.ConsoleShell.run(ConsoleShell.java:78)
> at net.wimpi.telnetd.net.Connection.run(Unknown Source)
Mar 05, 2014 12:39:58 PM net.wimpi.telnetd.net.ConnectionManager cleanupClosed
INFO: cleanupClosed():: Removing closed connection Thread[Connection1,5,]
电贺MINY
编辑:错误处理的工作吧! THX @ Wojciech Walczak 客户端不报告错误,但服务器报告错误。如果我在Windows上运行相同的代码,它不会产生错误。
服务器处于脱机状态时追溯的原因是因为您试图捕获不存在的异常(即名称ConnectionRefusedError
尚未分配值)。
仅仅为了其教育的目的我想删除`尝试...除了......”而让错误得到提升然后希望你会发现异常被提出什么。
至于Java的?回溯,WTF
...和你确定你正在使用Python 3.3或更高版本ConnectionRefusedError
已经在Python 3.3增加了
编辑:
由于启动时您的客户端工作正常从你的笔记本电脑,和在另一台机器上捕获ConnectionRefusedError
,我会说这个问题不是脚本本身。这是关于服务器的telnet /防火墙设置。其他Telnet客户端是否在脚本失败的环境中工作?
我现在更新了Python到3.3.4。一个问题解决了! – miny1997
错误在脚本中。 Linux上的telnet命令运行良好。
您可以在没有try/except子句的情况下运行代码并发布完整的回溯? –
没有错误,我认为问题是字节串 – miny1997
我跑的代码W/O尝试和除了它不报告错误。
我用字节字符串做了一些测试。
如果我运行此代码,机器显示不同的字符串。
命令:
print(b"Hello there!")
的Windows:
b"Hello there!"
的Linux:
Hello there!
我认为服务器端仍然存在错误?如果是这样,当你将'b'放入你的telnet客户端时会发生什么? (请回答下面我的评论。) –
服务器端没有错误。我用PuTTY测试了服务器。 'tn.write(b'say Hi')'''tn.write(“say Hi”.encode('ascii'))'That does not work – miny1997
有没有什么问题呢? –
更新的代码在Debian的(Windows仍然使用旧代码):
import telnetlib
import sys
if(True):
HOST = sys.argv[1]
user = sys.argv[3]
password = sys.argv[4]
cmd= sys.argv[5]
port=int(sys.argv[2])
tn = telnetlib.Telnet(HOST, port)
tn.read_until(b"username:")
tn.write(user.encode('ascii') + b"\n")
if password:
tn.read_until(b"password:")
tn.write(password.encode('ascii') + b"\n")
tn.write(cmd.encode('ascii') + b"\n")
我在Windows上测试了代码,telnet服务器可以运行这些命令。 当我在Debian上运行代码时,它并没有说什么,但服务器说*连接重置“。
你确定你在Debian的'python3'上运行脚本吗? –
是的,我使用cmd python3。 – miny1997