这些是一些Python脚本,用于通过套接字从客户端节点获取mac。
我使用multiprocessing.pool
使其运行得更快,但出现此错误:
TypeError: expected string or Unicode object, NoneType found
这是我正在使用的代码:
import os
import re
import socket
import sys
import multiprocessing
def get_mac(cli, caddr):
while True:
macinfo = cli.recv(1024)
if macinfo:
print('get [{}] from {}'.format(macinfo, caddr))
else:
print('establish but get nothing from {}'.format(caddr))
print('TERMINAL CLI-SOCKET')
cli.close()
cli.sendall('Done')
log.info('Send Confirm <Done> To {}'.format(caddr))
info = macinfo.split(',').strip()
return info
def gen_config(info):
print(info)
def start(func):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
addr = ('mn0', 1995)
sock.bind(addr)
sock.listen(5)
pool = multiprocessing.Pool()
while True:
print('waitting for new connect ...')
cli, caddr = sock.accept()
print('establish new connect with {}'.format(caddr))
pool.apply_async(func, args=(cli, caddr,), callback=gen_config)
pool.close()
pool.join()
if __name__ == '__main__':
start(get_mac)
#!/usr/bin/env python
import socket
def send():
addr = ('mn0', 1995)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(addr)
print('Establish Connect with {}'.format(addr))
sock.sendall('{},{}'.format('192.168.85.1', 'da:ad:as:as:as:sa'))
print('send 192.168.85.1 da:ad:as:as:as:sa')
data = sock.recv(1024)
if data == 'Done':
print('Confirm Send')
sock.close()
if __name__ == '__main__':
send()
完整错误消息:
[root@mn0 svr]# python svr.py
waitting for new connect ...
establish new connect with ('192.168.85.128', 52798)
waitting for new connect ...
Exception in thread Thread-2:
Traceback (most recent call last):
File "/usr/lib64/python2.7/threading.py", line 812, in __bootstrap_inner
self.run()
File "/usr/lib64/python2.7/threading.py", line 765, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/lib64/python2.7/multiprocessing/pool.py", line 342, in _handle_tasks
put(task)
TypeError: expected string or Unicode object, NoneType found