0

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

是否可以使用现有的或修改 distutils/py2exe 以使最终用户访问 py2exe 环境中的 Python shell?

4

1 回答 1

1

正如 pymntos google 小组的 Matt Anderson 所记录的那样,有一种非常简单的方法可以实现这一点。我已经看到了它的一些变化,但是当我用谷歌搜索时,这个首先出现了。:p

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

但是,将其作为线程执行的问题 - 如果不做某种队列并传递东西,您就不能很容易地在主线程中旋转变量/数据。

你也可以有一个异步套接字——这样你就可以作为主线程参与者来玩弄东西。出于多种原因,这本质上是危险的。但是,我们说的是裸机。

如果您使用 Twisted 库,则可以使用Twisted Conch,它允许您创建可以与应用程序的其余部分通信的 SSH 或 Telnet 服务器。但是,这可能是个问题,因为您使用 UI 中的事件循环来处理事件 - 您不能有两个事件循环。如果您使用的是 Qt,则有一个 Twisted Qt Reactor 事件循环。如果是窗户或其他东西..我不知道。但是,这至少应该让你考虑一些事情。

原文链接为:https ://groups.google.com/forum/?fromgroups#!topic/pymntos/-Mjviu7R2bs

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()
于 2013-06-05T07:09:35.690 回答