try
import PyInstaller
import signal
import socket
import os
import sys
from datetime import datetime
def signal_handler(sig, frame):
print('Программа завершена пользователем.')
sys.exit(0)
def is_duplicate(text, file_path):
try:
with open(file_path, 'r') as file:
existing_content = file.read()
return text in existing_content
except FileNotFoundError:
return False
def get_current_date():
return datetime.now().strftime("%Y-%m-%d")
def receive_data_and_save(folder_path):
# Создаем сокет
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Привязываем сокет к определенному адресу и порту
server_address = ('192.168.1.32', 12345)
server_socket.bind(server_address)
# Слушаем входящие соединения (в данном случае, ожидаем только одно соединение)
server_socket.listen(1)
print("Ждем соединения...")
# Принимаем соединение
client_socket, client_address = server_socket.accept()
print(f"Подключен клиент: {client_address}")
# Создаем словарь для преобразования подстрок в имена продуктов
product_mapping = {
'Джитин продукта': 'Название продукта',
'Джитин продукта': 'Название продукта',
'Джитин продукта': 'Название продукта',
# Добавьте другие подстроки и имена по мере необходимости
}
try:
# Получаем текущую дату
current_date = get_current_date()
# Проверяем наличие папки для текущей даты и создаем ее, если она отсутствует
folder_path_for_date = os.path.join(folder_path, current_date)
if not os.path.exists(folder_path_for_date):
os.makedirs(folder_path_for_date)
while True:
# Принимаем данные от клиента
data = client_socket.recv(1024).decode('utf-8')
# Если данные пусты, завершаем цикл
if not data:
print("Пустые данные, завершаем цикл.")
break
# Определяем тип продукта
product_type = data[2:16].strip()
# Преобразуем подстроку в имя продукта, если подстрока найдена в словаре
product_name = product_mapping.get(product_type, product_type)
# Формируем полный путь к файлу с использованием текущей даты и имени продукта
file_path = os.path.join(folder_path_for_date, f"{product_name}.txt")
# Проверяем наличие файла и создаем его, если он отсутствует
if not os.path.exists(file_path):
open(file_path, 'w').close() # Создаем пустой файл, если он не существует
# Открываем файл для записи в режиме добавления (write append)
with open(file_path, 'a+') as file:
# Проверяем длину текста, наличие повторения и ограничение по символам перед записью в файл
if len(data) >= 30 and len(data) <= 60 and not is_duplicate(data, file_path):
# Записываем данные в файл
file.write(data + '\n')
# Принудительно сбрасываем данные на диск
file.flush()
os.fsync(file.fileno())
print(f"Принято ({product_name}): {data}")
elif len(data) < 30:
print(f"Принято слишком короткое сообщение ({product_name}): {data}")
elif len(data) > 60:
print(f"Пропускаем слишком длинное сообщение ({product_name}): {data}")
else:
print(f"Пропускаем повторяющийся текст ({product_name}): {data}")
except KeyboardInterrupt:
print('Программа завершена пользователем.')
finally:
print("Закрываем соединение.")
client_socket.close()
server_socket.close()
if __name__ == "__main__":
# Задаем путь к основной папке
folder_path = r'C:\Users\robo\Desktop\n2'
# Устанавливаем обработчик сигнала SIGINT
signal.signal(signal.SIGINT, signal_handler)
# Запускаем сервер и записываем данные в файл для разных типов продуктов
receive_data_and_save(folder_path)
except Exception as e:
print(f"Произошла ошибка: {e}")
sys.exit(1)
input("Нажмите Enter для выхода")
Код написан чат гпт4, я не программист, почти ничего не понимаю, просто была поставлена задача сделать программу для получения информации от клиента и записи ее в txt файл. Проблема в том, что я скомпилировал этот код с помощью pyinstaller и скинул папку с exe файлом на другой компьютер чтобы запустить, но после запуска открывалась cmd и моментально закрывалось, удалось сфоткать что-за ошибка.
Перепроверял ip все совпадает, не знаю что делать.
Компилил командой pyinstaller имя файла