subprocess.Popen用py2exe运行无限循环

时间:2011-08-05 19:27:00

标签: python subprocess popen py2exe

我正在尝试使用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”时,运行已编译的agent.exe只会打印“这是否正常?”在一个无限循环。我做错了什么?

2 个答案:

答案 0 :(得分:2)

当作为已编译的可执行文件运行时,

sys.executable指向agent.exe而不是python.exe。您需要将Popen更改为:

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

运行已编译的可执行文件时。您可以使用hasattr(sys, "frozen")来确定您是处于冻结(py2exe)还是不是(Python脚本)模式。

答案 1 :(得分:0)

这不太奏效,但我所要做的就是用完整的路径名替换你的答案。谢谢!这很有效:

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