Я пишу сетевое приложение Python, в котором есть 2 компонента агента и сервер. Агент подключается к серверу для отправки данных. Я использую pyinstaller для преобразования сценария агента в файл .exe. Если я не добавлю параметр -w , который поможет скрыть консоль, код будет работать нормально. Но когда я добавил опцию -w, код не запустился.
Вот мой код агента:
def SocketConnect(Server_IP,PORT):
# Create Socket
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, e:
log_file.write(time.ctime() + " : Error creating socket : %s\n" %e)
log_file.close()
sys.exit(1)
# Connect
try:
s.connect((Server_IP, PORT))
except socket.error, e:
log_file.write(time.ctime() + " : Connect : %s\n" %e)
log_file.close()
sys.exit(1)
# Send Data
data = pickle.dumps({'OS':[OS()], 'CPU':[CPU()], 'DISK' : [DISK()], 'MEMORY': [MEMORY()], 'NETWORK': [NETWORK()], 'FIREWALL' : FIREWALL()})
try:
s.send(data)
except socket.error, e:
log_file.write(time.ctime() + " : Error sending data: %s\n" % e)
log_file.close()
sys.exit(1)
# Close Socket
s.close()
if __name__ == "__main__" :
config_file = open('AgentConfig.cfg', 'r') # Open Config File - Read
log_file = open('Log.txt', 'a') # Open Log File - Write
Server_IP = config_file.readline().rstrip()
PORT = int(config_file.readline().rstrip())
FREQUENCE = config_file.readline()
# Check valid Server_IP & PORT
parts = Server_IP.split(".")
if Server_IP == '' or PORT == '' :
log_file.write(time.ctime() + " : Server IP or Connect Port is not config !\n")
log_file.close()
sys.exit(1)
elif len(parts) != 4:
log_file.write(time.ctime() + " : Server IP is not a valid IP !\n")
log_file.close()
sys.exit(1)
else :
for item in parts:
if not 0 <= int(item) <= 255:
log_file.write(time.ctime() + " : Server IP is not a valid IP !\n")
log_file.close()
sys.exit(1)
elif PORT not in range(0,65536) :
log_file.write(time.ctime() + " : Port must be in range 0-65535 !\n")
log_file.close()
sys.exit(1)
else :
while True :
log_file = open('Log.txt', 'a') # Open Log File - Write
log_file.write(time.ctime() + " : Connect to Server at " + Server_IP + " : Port " + str(PORT) + "\n")
SocketConnect(Server_IP,PORT)
log_file.write(time.ctime() + " : Send data Success !\n")
log_file.close()
time.sleep(int(FREQUENCE))
Когда я запускаю Агент, он не запускается, и на сайте сервера появляется следующая ошибка:
----------------------------------------
Exception happened during processing of request from ('192.168.10.111', 21672)
Traceback (most recent call last):
File "C:\Python27\lib\SocketServer.py", line 290, in _handle_request_noblock
self.process_request(request, client_address)
File "C:\Python27\lib\SocketServer.py", line 318, in process_request
self.finish_request(request, client_address)
File "C:\Python27\lib\SocketServer.py", line 331, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "C:\Python27\lib\SocketServer.py", line 652, in __init__
self.handle()
File "Server.py", line 116, in handle
temp_list = pickle.loads(self.data).values()
File "C:\Python27\lib\pickle.py", line 1388, in loads
return Unpickler(file).load()
File "C:\Python27\lib\pickle.py", line 864, in load
dispatch[key](self)
File "C:\Python27\lib\pickle.py", line 886, in load_eof
raise EOFError
EOFError
----------------------------------------
А вот соответствующий код на сервере. Используется для получения данных от клиента.
def handle(self):
# self.request is the TCP socket connected to the client
try:
self.data = self.request.recv(4096)
except socket.error, e:
log_file.write(time.ctime() + " : Error receive: %s" %e)
log_file.close()
sys.exit(1)
temp_list = pickle.loads(self.data).values()
Я не знаю, почему это произошло. Как опция -w pyinstaller может повлиять на мой код?