4

我试图让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

我也尝试将 Websockify 编译为 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 可执行文件的任何想法?

4

2 回答 2

0

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

于 2014-09-27T00:45:51.317 回答
0

要解决这个问题,请对示例源使用修改后的以下命令,从每个步骤的开头开始,看看它是否有帮助:

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

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

    • 在您的本地代码中,导入资源模块以允许您监视、测量和控制程序使用的系统资源
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

如果适合的话,这里还有一个将 websockify 作为 Windows 服务运行的指南(在您的源代码中再次提到)。

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

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

我相信您的代码依赖于对系统资源(例如端口等)进行更改和监控,并且您不允许您的代码拥有这些权限,因此它需要资源模块。如果您从程序(我称之为本地代码)调用 run.exe,那么您需要在顶部导入资源。如果您只是直接从命令行调用 run.exe 程序,请尝试制作这个新程序,看看是否有帮助。如果没有,请将您的 websockify 文件夹和 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' )
于 2014-09-17T22:32:33.117 回答