Что может быть причиной того, что pyinstaller заставил .exe перезапустить себя даже после прерывания клавиатуры? - PullRequest
1 голос
/ 08 февраля 2012

Я случайно создал Франкенштейна.

В интерпретаторе все работает нормально, но после запуска python pyinstaller.py --onefile myFile.py для создания .exe, при запуске он начинает вести себя странно. Кажется, что она вызывает main() функцию, казалось бы, случайно - даже после прерывания работы клавиатуры она сама себя воскрешает.

Код выглядит так:

def main():
    print 'DO NOT CLOSE!'
    count = 0
    lastTime =  ((time.localtime()[4])*60) + (time.localtime()[5])
    sShot = ImageGrab.grab()
    saveSnap(count, lastTime)
    currentScreen = grab()
    while True:
        if currentScreen == grab():
            pass
        else:

            count += 1
            saveSnap(count, lastTime)
            currentScreen = grab()
            lastTime = ((time.localtime()[4])*60) + (time.localtime()[5])


if __name__ == '__main__':
    main()

Довольно простые вещи, и, как я уже сказал, они отлично работают в интерпретаторе. Все, что он делает, это ищет изменения на экране, а затем timeStamps снимок.

Что будет вызывать случайный выстрел main()? Иногда это происходит даже до прерывания клавиатуры.

1 Ответ

2 голосов
/ 18 августа 2015

Я предполагаю, что модуль ImageGrab использует модуль multiprocessing для запуска подпроцесса, который собирает образ, и этот подпроцесс вызывает проблемы с однофайловым исполняемым файлом PyInstaller.Проблема в том, что в Windows нет команды spawn, и она просто перезапускает исполняемый файл.Вы должны настроить некоторые переменные окружения , чтобы избежать случайного перезапуска вашей программы.

...