Я создаю довольно сложное приложение, используя Python и PySide. Наконец-то приближается день релиза, поэтому я хочу собрать это приложение в виде исполняемого файла.
Тем не менее, у меня есть странная проблема на моих руках. Я использовал PyInstaller (кстати, используя версию 2) в прошлом, и со мной этого никогда не случалось.
По сути, когда я создаю приложение с флагом --console
, оно работает нормально, но открывает окно консоли. Когда я создаю приложение с флагом окна (-w
), оно не работает нормально. Он запускается и все, но есть все эти странные глюки. Например, при загрузке текстового файла часто возникает ошибка BadFileDescriptor
(которой не бывает в консольном режиме), а приложение вылетает после выполнения определенной задачи. Хуже то, что задача представляет собой цикл, и в первый раз она выполняется нормально, но когда снова начинает работать, происходит сбой.
Когда я просматривал файл минидампа, были некоторые ошибки о нарушении доступа к памяти файла QtGui4.dll. Опять же, этого не происходит в режиме консоли.
У кого-нибудь есть идеи?
print
илиsys.stdout.write
? Читаю здесь (к сожалению, итальянский для вас) ошибка плохого дескриптора файла может быть вызвана этим, и вы можете решить ее, удалив / закомментировавprint
или перенаправивsys.stdout
или используя вместо этогоlogging
. Кажется, что когда вы запускаете приложение в оконном режиме, этоstdout
буфер фиксированного размера, что может вызвать нарушения доступа к памяти. - person Bakuriu   schedule 17.11.2012import sys; import tempfile; sys.stdout = tempfile.TemporaryFile(); sys.stderr = tempfile.TemporaryFile()
(надеюсь, с лучшим форматированием) в самом начале выполнения вашей программы, тогда всеprint
будут перенаправлены во временный файл, который будет удален при выходе из вашей программы. Для более долгосрочного решения я бы подумал об использованииlogging
. - person Bakuriu   schedule 17.11.2012print
, так иlogging
. Спасибо еще раз. - person Bo Milanovich   schedule 17.11.2012sys.stdout = tempfile.TemporaryFile() sys.stderr = tempfile.TemporaryFile()
Но почему-то я все еще вижу отпечатки в консоли PyCharm, а приложение все равно не работает. --- РЕДАКТИРОВАТЬ, неважно, у меня былоreload(sys)
в одной части моего кода. Теперь это работает! - person Bo Milanovich   schedule 17.11.2012