Python OSError:[Errno 24]打开的文件太多:'/dev/null';或者我连接的网络上没有显示IP
我正在编写一个python脚本,用于检测连接到网络的IP地址 当我在Spyder Anaconda(MAC OS)中运行脚本时,它运行得非常完美 但当我在windows中运行该程序时,它只打印主机IP地址,而不是所有连接的IP地址 另外,当我在MAC OS中通过终端运行程序时,它再次向我显示错误 OSError:[Errno 24]打开的文件太多:'/dev/null' 知道我做错了什么吗 我的代码:Python OSError:[Errno 24]打开的文件太多:'/dev/null';或者我连接的网络上没有显示IP,python,networking,Python,Networking,我正在编写一个python脚本,用于检测连接到网络的IP地址 当我在Spyder Anaconda(MAC OS)中运行脚本时,它运行得非常完美 但当我在windows中运行该程序时,它只打印主机IP地址,而不是所有连接的IP地址 另外,当我在MAC OS中通过终端运行程序时,它再次向我显示错误 OSError:[Errno 24]打开的文件太多:'/dev/null' 知道我做错了什么吗 我的代码: #!/usr/bin/env python3 # -*- coding: utf-8 -*-
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 21 09:46:11 2019
@author: vivanksharma
"""
import os
import socket
import multiprocessing
import subprocess
import os
def pinger(job_q, results_q):
"""
Do Ping
:param job_q:
:param results_q:
:return:
"""
DEVNULL = open(os.devnull, 'w')
while True:
ip = job_q.get()
if ip is None:
break
try:
subprocess.check_call(['ping', '-c1', ip],
stdout=DEVNULL)
results_q.put(ip)
except:
pass
os.close(os.devnull)
def get_my_ip():
"""
Find my IP address
:return:
"""
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
ip = s.getsockname()[0]
s.close()
print("Host IP address is "+ip+"\n")
return ip
def map_network(pool_size=255):
"""
Maps the network
:param pool_size: amount of parallel ping processes
:return: list of valid ip addresses
"""
ip_list = list()
# get my IP and compose a base like 192.168.1.xxx
ip_parts = get_my_ip().split('.')
base_ip = ip_parts[0] + '.' + ip_parts[1] + '.' + ip_parts[2] + '.'
# prepare the jobs queue
jobs = multiprocessing.Queue()
results = multiprocessing.Queue()
pool = [multiprocessing.Process(target=pinger, args=(jobs, results)) for i in range(pool_size)]
for p in pool:
p.start()
# cue hte ping processes
for i in range(1, 255):
jobs.put(base_ip + '{0}'.format(i))
for p in pool:
jobs.put(None)
for p in pool:
p.join()
# collect he results
while not results.empty():
ip = results.get()
ip_list.append(ip)
return ip_list
if __name__ == '__main__':
print('Mapping...')
lst = map_network()
#Define your Friendly IP here
friendly_ip = ['192.168.43.21']
for i in lst:
flag = 0
for j in friendly_ip:
if i == j:
pass
else:
flag = 1
if(flag==1):
print("Enemy IP is :"+i)
print("All IP Address connected to network is : "+str(lst))
p.S对于OSError来说,这不是一个重复的问题[Errno 24]我尝试了所有问题,但都没有成功看起来这里可能会发生一些事情。我无法重现您的确切错误,这是有意义的,因为它可能与您的操作系统的文件限制有关
os.close(os.devnull)
,我很确定它应该是devnull.close()
。这可能意味着您从未关闭文件描述符,导致“打开的文件太多”池大小
)。这可能会使你的程序变慢,但至少会起作用。我将它设置为2
,虽然花了一段时间,但最终还是完成了