使用py2exe的subprocess.Popen无限循环运行

2 投票
2 回答
2086 浏览
提问于 2025-04-16 22:59

我正在尝试使用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时,它只是无限循环打印'is this working?'。我到底哪里做错了?

2 个回答

2

sys.executable 指向 agent.exe 而不是 python.exe,当你以编译后的可执行文件运行时。你需要把你的 Popen 改成:

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

当你运行编译后的可执行文件时。你可以使用 hasattr(sys, "frozen") 来判断你是在“冻结”(py2exe)模式还是在普通的(Python 脚本)模式。

0

这方法不太管用,不过我只需要把你的答案换成完整的路径名就行了。谢谢!这样就成功了:

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

撰写回答