【问题标题】:py2exe - generated executable freezes when connecting to socketpy2exe - 连接到套接字时生成的可执行文件冻结
【发布时间】:2009-05-31 11:08:16
【问题描述】:

请原谅我的无知,因为我仍然是编码的初学者。

我正在尝试使用 py2exe 将我编写的 python 脚本转换为 Windows 可执行程序。但是,虽然我能够成功转换脚本,但可执行文件似乎并没有完全发挥作用。

经过多次调试,我已经隔离了原因,下面的代码似乎是问题

host = str(raw_input('Enter Host IP Address: ')) 
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((host, 5000))

从 Pydev 本身执行脚本并且脚本能够正常运行时不会出现此问题。作为控制台应用程序的 Windows 可执行文件在尝试连接到另一台主机时只是挂起

这是一个已知问题还是我做错了什么?非常感谢任何帮助。

【问题讨论】:

  • 也许尝试捕获任何抛出的异常?也可以检查一下超时值是多少?
  • 我知道当我在 vb.net 中编写一个类似的程序时我可能有点偏离我在 ping/连接到其他机器时必须使用后台线程,因为套接字连接命令会阻塞主程序线程,也许我离基地很远
  • @Brian R. Bondy - 没有抛出异常。该程序应该连接到本地服务器,我没有设置超时值。
  • @Jim - 我确实有线程处理接收和发送数据到主机;但是,Windows 可执行文件只是在线程启动之前挂起。
  • 不,吉姆,你是对的。连接被阻塞。

标签: python py2exe


【解决方案1】:

你能输入IP地址吗?阅读 that thread 似乎 py2exe 需要一个特殊的 windows 参数来启动控制台。否则,raw_input 会尝试从标准输入中读取数据,然后因为找不到任何内容而挂起/崩溃。

鉴于线程的年龄,我检查了py2exe doc:您可能想尝试将您的脚本放在 console 属性中。

我确实认为该行为与raw_input有关,并且它不是由套接字操作引起的。

【讨论】:

  • 你好。我在 setup.py 中使用了“console”参数,控制台应用程序提示输入。如果我要注释掉套接字操作并让我的脚本打印输入(对于主机的 IP 地址),它会正常工作。因此,我认为这是由于连接。 ://
  • 那么,由于连接处于阻塞状态,等待另一端应答,您应该在尝试连接之前尝试在 client_socket 上设置超时。 (默认超时为无,这意味着如果您的服务器损坏,客户端将永远等待)。如果“超时” SocketError 中断,则意味着服务器未在侦听/使用了错误的地址:)
猜你喜欢
  • 2022-08-05
  • 1970-01-01
  • 2010-09-24
  • 2010-09-11
相关资源
最近更新 更多