Python端口扫描器输出多余None,如何消除该问题?
解决Python端口扫描器输出多余“None”的问题
你提到运行一款从CSV读取设备的Python端口扫描器时,功能正常但每次输出结果后都会打印None,先看你给出的输出示例:
10.38.0.45 - Port 22: OK
None
10.38.0.46 - Port 22: OK
None
10.38.0.47 - Port 22: OK
None
结合你贴出的代码,我很快找到了问题所在——问题出在你调用check函数的方式上,和check函数内部的扫描逻辑无关。
原因分析
你的check函数内部已经通过print()语句输出了端口检测结果,但这个函数没有定义任何return语句。在Python中,没有返回值的函数会默认返回None。如果你的主程序(读取CSV的部分你没贴出来)是类似这样调用的:
# 错误的调用示例(读取CSV后循环调用) for row in csv_reader: print(check(row['ip'], row['port']))
这里外层的print()会把check函数的返回值(也就是默认的None)打印出来,这就是你看到的多余输出。
修复方法
只需要去掉调用check函数时外层的print(),直接调用函数即可:
# 正确的调用方式 for row in csv_reader: check(row['ip'], row['port'])
这样check函数内部的print()会正常输出扫描结果,不会额外打印None。
小优化建议(可选)
看你的代码里portlist1和portlist2都只包含一个端口,其实可以去掉循环,直接检测对应端口,让代码更简洁。比如针对22端口的部分可以改成:
if port == '22': try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(3) result = sock.connect_ex((remote_server_ip, 22)) if result == 0: print(f'\n{remote_server_ip} - Port 22: OK\n') else: print(f'\n{remote_server_ip} - Not able to connect on Port 22:\n') sock.close() # 异常处理部分保持不变 except KeyboardInterrupt: print("You pressed Ctrl+C") sys.exit() # ... 其他异常处理
不过这部分不影响当前的None问题,只是让代码更高效~
内容的提问来源于stack exchange,提问作者Gustavo
相关产品推荐
相关产品推荐

