@drimun

Не запускается код скомпилированный с помощью pyinstaller на другом компе, что делать?

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 и моментально закрывалось, удалось сфоткать что-за ошибка.657705eb81e7e418502526.jpeg
Перепроверял ip все совпадает, не знаю что делать.
Компилил командой pyinstaller имя файла
  • Вопрос задан
  • 150 просмотров
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Код написан чат гпт4, я не программист

Тогда, боюсь, тебе на фриланс. Кто знает, что там эта дура железная наворотила. Нужно же понимать, что генеративные сети не понимают, что пишут - они тупо ремиксят то, что когда-то видели.

Но да, вполне может быть, что проблема в этом:
# Привязываем сокет к определенному адресу и порту
server_address = ('192.168.1.32', 12345)
server_socket.bind(server_address)

Ты пытаешься слушать и принимать соединения на этот адрес из диапазона локальных сетей. Т.е. ты не коннектишься к серверу на этом адресе, а ожидаешь, что к тебе будут коннектиться. Но что, если у целевого компа другой адрес? Почему вообще твоя программа ведёт себя как сервер? В таких случаях обычно сервер расположен где-то на машине, доступной из Сети, а софт, запускаемый на компе клиента уже к нему коннектится. У тебя наоборот.

сделать программу для получения информации от клиента и записи ее в txt файл

Что за информация? Как она получается? Критично ли именно в txt файл?
В простейшем случае может хватить и гугл-формы.

Короче, вывод: нехрен полагаться на гпт, вообще ни в чём. Там нужно в два раза лучше разбираться, чтобы понять, оно дело сделало, или фигню наворотило.
Ответ написан
@maximq
QA Engineer
Во первых: код следует оформлять специальным тегом!
Во вторых: какая версия python используется? Windows 7 (на скриншоте), поддерживает до 3.8 включительно.
Другой компьютер находится в той же сети, что первый? Указанный IP-адрес доступен? - Почитайте этот вопрос, возможно здесь есть ваш ответ
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы