有可能在py2exe构建中使用python shell吗?

有可能在py2exe构建中使用python shell吗?,python,py2exe,distutils,Python,Py2exe,Distutils,我通过distutils和py2exe发布了一个windows软件包。出于开发目的,我希望能够访问py2exe构建中的python控制台。我看到py2exe构建中有一个python27.dll文件,所以我希望可以利用它来启动python终端 有没有可能使用现有的或修改distutils/py2exe来让最终用户访问py2exe环境中的Python shell?正如pymntos谷歌小组的马特·安德森(Matt Anderson)所述,有一种非常简单的方法可以实现这一点。我看到过它的一些变体,但这

我通过distutils和py2exe发布了一个windows软件包。出于开发目的,我希望能够访问py2exe构建中的python控制台。我看到py2exe构建中有一个
python27.dll
文件,所以我希望可以利用它来启动python终端


有没有可能使用现有的或修改distutils/py2exe来让最终用户访问py2exe环境中的Python shell?

正如pymntos谷歌小组的马特·安德森(Matt Anderson)所述,有一种非常简单的方法可以实现这一点。我看到过它的一些变体,但这一个是我在谷歌搜索时最先出现的p

果汁在stdlib模块中,利用code.InteractiveInterpeter。唯一需要做的就是在应用程序启动时将其作为线程添加进来。然后,当应用程序启动时,您可以telnet'localhost 7777',您应该进入Python解释器

但是,作为线程执行的问题是,如果不执行某种队列和传递,就不能很容易地在主线程中旋转变量/数据

您也可以使用一个异步套接字,这样您就可以作为一个主线程参与者来处理内容。出于许多原因,这本身就是危险的。但是,我们说的是裸金属

如果您使用Twisted库,您可以使用,它允许您创建一个SSH或Telnet服务器,可以与应用程序的其余部分通信。但是,这可能是一个问题,因为您正在使用UI中的事件循环来处理事件-不能有两个事件循环。如果您使用的是Qt,那么就有一个扭曲的Qt反应器事件循环。如果是窗户或其他东西。。我不知道。但是,这至少应该给你一些需要考虑的事情。 原始链接是:

导入套接字
导入代码
导入系统
类MyConsole(代码.InteractiveConsole):
定义初始化(self、rfile、wfile、locals=None):
self.rfile=rfile
self.wfile=wfile
代码.InteractiveConsole.\uuuu init__(
self,locals=locals,filename='')
def原始输入(自身,提示=“”):
self.wfile.write(提示)
返回self.rfile.readline().rstrip()
def写入(自身、数据):
self.wfile.write(数据)
netloc=('',7777)
servsock=socket.socket()
servsock.setsockopt(socket.SOL_socket,socket.SO_REUSEADDR,True)
servsock.bind(netloc)
servsock.听(5)
打印“倾听”
sock,\=servsock.accept()
打印“已接受”
rfile=sock.makefile('r',0)
sys.stdout=wfile=sock.makefile('w',0)
控制台=MyConsole(rfile,wfile)
console.interactive()

是。。。查看PyCastlePyCastle依赖于wxWindows,如果您还没有使用它,它可能是非初学者。wxWindows在最近的OSX上也有一些问题。YMMV!
import socket
import code
import sys

class MyConsole(code.InteractiveConsole):
    def __init__(self, rfile, wfile, locals=None):
        self.rfile = rfile
        self.wfile = wfile
        code.InteractiveConsole.__init__(
            self, locals=locals, filename='<MyConsole>')

    def raw_input(self, prompt=''):
        self.wfile.write(prompt)
        return self.rfile.readline().rstrip()

    def write(self, data):
        self.wfile.write(data)


netloc = ('', 7777)
servsock = socket.socket()
servsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
servsock.bind(netloc)
servsock.listen(5)
print 'listening'
sock, _ = servsock.accept()
print 'accepted'

rfile = sock.makefile('r', 0)
sys.stdout = wfile = sock.makefile('w', 0)

console = MyConsole(rfile, wfile)
console.interact()