Этот модуль возвращает список. Когда я вызываю модуль с ipscan.scan('192.168.11', 161)
, список добавляется вместо того, чтобы возвращать новый. Единственный способ, которым мне удалось «перезагрузить» список, было переназначить глобальный ключ параметра «node_list» следующим образом: ipscan.scan.func_globals['node_list'] = []
Модуль Python, повторно использующий один и тот же объект
Будучи новичком, я не знаю, как лучше описать проблему. Спасибо!
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
Вы пробовали просто вызвать node_list = [] перед циклом сканирования? – danielfranca
Да, такое же поведение. – dann
Когда вы говорите: «список добавляется вместо того, чтобы возвращать новый». вы имеете в виду, что если вы дважды назовете «сканирование», он добавит новые значения в один список? – danielfranca