如何在Windows上使用带有python的websockify或将websockify编译为windows可执行文件(一次用于多个客户端连接)

时间:2014-09-07 15:36:53

标签: python websocket websockify

我试图让websockify 0.6.0在Windows上运行,但没有运气,

我已经尝试了python websockify.py 1501 10.0.0.141:1501,但它不好,得到错误,就像那样:

Traceback (most recent call last): File "websockify.py", line 1, in <module> run NameError: name 'run' is not defined

我也试过Compiling Websockify as Windows Executable,但这也行不通 我使用以下命令run.exe 1501 10.0.0.141:1501,它在开头看起来很有希望,将以下内容输出到控制台:

WARNING: no 'resource' module, daemonizing is disabled WebSocket server settings: - Listen on :1501 - Flash security policy server - No SSL/TLS support (no cert file) - proxying from :1501 to 10.0.0.141:1501

但是在尝试使用浏览器ws://localhost:1501

中的以下内容进行连接之后

**它会输出以下错误

Traceback (most recent call last): File "run", line 5, in <module> File "websockify\websocketproxy.pyc", line 419, in websockify_init File "websockify\websocket.pyc", line 1018, in start_server UnboundLocalError: local variable 'exc' referenced before assignment


关于如何在windows上使用websockify或如何使用已编译的websockify作为Windows可执行文件的任何想法?

2 个答案:

答案 0 :(得分:0)

要解决此问题,请对example source使用修改后的命令,从每个步骤的开头开始,看看是否有帮助:

  • 首先,安装Portable Python 2.7
  • 然后您需要修改setup.py(看起来这就是您收到第一个错误的原因,因为您可能没有定义运行):
from setuptools import setup, find_packages
# add (line 2):
import py2exe

setup(name=name,
# add (line 10):
console=['run'],
  • 通过检查setup.py确保上述操作已正确执行,并确保其包含run。

    • 在您的本地代码中,导入resources模块以允许您监控,测量和控制程序使用的系统资源
import resource
 
  • 检查你的本地变量exc并确保你在调用它之前为它分配了一个值(我猜你可能已经将一个系统变量归因于它,但是python无法像你一样这样做没有导入资源,因此没有分配)。如果您愿意,请在此回复的评论中提供您的代码示例,我将仔细研究这一部分。

  • 返回源指南,在命令提示符下导航到websockify文件夹,然后执行以下命令编译websockify:

[Your path to Portable Python install]\App\python.exe setup.py py2exe --includes numpy
 
  • 您现在将在websockify目录中看到一个新的目录'dist',其中包含已编译的exe。提供的示例是:
run.exe 5901 localhost:5900
 

还有一个指南here可以将websockify作为Windows服务运行(如果适合的话)(在您的来源中再次提及)。

----进一步编辑以获取更多详细信息----

打开两个似乎给你问题的文件(websockify \ websocketproxy.pyc和websockify \ websocket.pyc,并确保在之后引用对名为“exc”的变量的任何引用已被分配一个值(如果您尚未修改这些文件,则会出现问题的可能性很小。

我相信您的代码依赖于制作和监视系统资源(例如端口等)的更改,并且您不允许您的代码拥有这些权限,因此它需要资源模块。如果从程序(我称之为本地代码)调用run.exe,则需要在顶部导入资源。如果你只是直接从命令行调用run.exe程序,那么尝试制作这个新程序,看看这是否有帮助。如果没有,请将webockify文件夹和run.exe的内容发送给我,我将会看一下

# Program Name: goAndRun.py

# Code:

import sys, string, os, arcgisscripting, resource
os.chdir( 'C:\\[Path_to_the_dir_containing_run.exe]' )
os.system( '"C:\\[Path_to_the_dir_containing_run.exe]\run.exe, 5901 localhost:5900"' )

然后使用命令:

python goAndRun.py

不在您的环境中,我无法判断这是否会像我写的那样完全执行。最后一行也可能是:

os.system( '"C:\\[Path_to_the_dir_containing_run.exe]\run.exe"', '5901 localhost:5900' )

答案 1 :(得分:0)

使用websockify在Windows上运行的最简单方法是使用websockify的Node.js版本(在其他/ js目录中)。它开箱即用,不需要恶作剧。