使用py2exe的subprocess.Popen无限循环运行
我正在尝试使用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)