Ошибка Pyinstaller при добавлении опции -w - PullRequest
0 голосов
/ 04 мая 2018

Я пишу сетевое приложение 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 может повлиять на мой код?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...