Python 模块重用同一个对象
Python module reusing the same object
这个模块returns一个列表。当我用 ipscan.scan('192.168.11', 161)
调用模块时,列表会被附加而不是返回一个新列表。我设法 "reset" 列表的唯一方法是像这样 ipscan.scan.func_globals['node_list'] = []
重新分配全局参数键 "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
这很简单,不要在函数外声明你的列表。
将 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
本质上,您想多读一点有关名称空间的内容。
这个模块returns一个列表。当我用 ipscan.scan('192.168.11', 161)
调用模块时,列表会被附加而不是返回一个新列表。我设法 "reset" 列表的唯一方法是像这样 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
这很简单,不要在函数外声明你的列表。
将 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
本质上,您想多读一点有关名称空间的内容。