我试着让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>runNameError: name 'run' is not defined
我也试过了,但也没用
我使用下面的命令run.exe 1501 10.0.0.141:1501
并且它在开始时看起来很有希望,将以下内容输出到控制台:WARNING: no 'resource' module, daemonizing is disabledWebSocket 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_serverUnboundLocalError: local variable 'exc' referenced before assignment
关于如何在windows上使用websockify/或者如何将编译后的websockify用作windows可执行文件,有什么想法吗?
最佳答案
要解决此问题,请对example source使用修改后的以下命令,从每个步骤的开头开始并查看是否有帮助:
首先,安装Portable 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并确保它包含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程序,那么尝试制作这个新程序,看看这是否有帮助。如果没有,请将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' )