subprocess.Popen работает бесконечный цикл с py2exe - PullRequest
2 голосов
/ 05 августа 2011

Я пытаюсь использовать py2exe для компиляции скрипта Python в исполняемый файл.Я настроил файл setup.py, как описано в документации:

from distutils.core import setup
import py2exe

setup(console=['agent.py', 'test.py'])

Файл agent.py просто использует subprocess.Popen, чтобы открыть другой скрипт:

import sys
import subprocess

print 'is this working?'

child = subprocess.Popen([sys.executable, 'test.py'])

Файл test.py:

while 0 == 0:
    print 'test'

При запуске в качестве скрипта Python он работает нормально.При запуске в качестве исполняемого файла, скомпилированного с py2exe, он не запускается.

Когда я пытаюсь изменить ссылку на файл в agent.py с 'test.py' на 'test.exe', запустив скомпилированный агент.exe просто печатает "это работает?"на бесконечной петле.Что я сделал не так?

Ответы [ 2 ]

2 голосов
/ 06 августа 2011

sys.executable указывает на agent.exe вместо python.exe при запуске как скомпилированный исполняемый файл. Вам нужно изменить Popen на:

child = subprocess.Popen(['test.exe'])

при запуске скомпилированного исполняемого файла. Вы можете использовать hasattr(sys, "frozen"), чтобы определить, находитесь ли вы в замороженном (py2exe) или нет (Python script) режиме.

0 голосов
/ 06 августа 2011

Это не совсем сработало, но все, что мне нужно было сделать, это заменить ваш ответ полным путем. Спасибо! Это сработало:

app_path = os.path.realpath(os.path.join(
    os.path.dirname(sys.executable), 'test.exe'))
child = subprocess.Popen(app_path)
...