此模块返回一个列表。当我使用ipscan.scan('192.168.11', 161)
调用模块时,会附加列表而不是返回新列表。我成功的唯一方法是重置"该列表是通过重新分配全局参数键" node_list"像这样ipscan.scan.func_globals['node_list'] = []
作为初学者,我不知道如何更好地描述问题。 谢谢!
import socket
from threading import Thread
socket.setdefaulttimeout(1)
node_list = []
def probe(ip, port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((ip, port))
node_list.append(ip)
except:
pass
s.close()
def scan(ipnet, port):
for x in range(1,255):
ip = '{0}.{1}'.format(ipnet, x)
t = Thread(target=probe, args=(ip, port))
t.start()
return node_list
正确初始化node_list
:
import socket
from threading import Thread
socket.setdefaulttimeout(1)
def probe(ip, port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((ip, port))
node_list.append(ip)
except:
pass
s.close()
def scan(ipnet, port):
global node_list
node_list = []
for x in range(1,255):
ip = '{0}.{1}'.format(ipnet, x)
t = Thread(target=probe, args=(ip, port))
t.start()
return node_list
答案 0 :(得分:0)
这很简单,不要在函数之外声明你的列表。
将node_list = []
移动到您的函数定义中:
def scan(ipnet, port):
node_list = []
for x in range(1,255):
ip = '{0}.{1}'.format(ipnet, x)
t = Thread(target=probe, args=(ip, port))
t.start()
return node_list
基本上,您想要更多地了解命名空间。