Ina*_*thi 4 python tornado raspberry-pi
我正在尝试使用Tornado服务器在RasPi上运行一个小的python webapp,但每当我尝试启动它时,我都会收到错误
Traceback (most recent call last):
File "main.py", line 78, in <module>
application.listen(8080)
File "/usr/local/lib/python2.7/dist-packages/tornado-3.0.1-py2.7.egg/tornado/web.py", line 1343, in listen
server.listen(port, address)
File "/usr/local/lib/python2.7/dist-packages/tornado-3.0.1-py2.7.egg/tornado/tcpserver.py", line 113, in listen
sockets = bind_sockets(port, address=address)
File "/usr/local/lib/python2.7/dist-packages/tornado-3.0.1-py2.7.egg/tornado/netutil.py", line 69, in bind_sockets
sock = socket.socket(af, socktype, proto)
File "/usr/lib/python2.7/socket.py", line 187, in __init__
_sock = _realsocket(family, type, proto)
socket.error: [Errno 97] Address family not supported by protocol
Run Code Online (Sandbox Code Playgroud)
我有理由相信我做的一切都很合适
是否需要在ARM上进行不同的调用,或者这是龙卷风/ socket.py中的某个错误?有可用的解决方法吗?
由于它似乎是相关的,Pi正在从这个页面运行最新的Raspbian图像(几天前从第二个镜像下载,所以不再是最新版本了).我目前正在尝试使用旧版本,如果不起作用,我会尝试最新版本.
事实证明这与ARM无关.根据他的一条评论中的答案 artless noise,如果您启动它的系统支持IPv6,看起来 Tornado会感到困惑,这显然包括Raspberry Pi.
启动服务器
application.listen(8080, '0.0.0.0')
Run Code Online (Sandbox Code Playgroud)
而不仅仅是
application.listen(8080)
Run Code Online (Sandbox Code Playgroud)
为我解决了这个问题.
编辑2:对于跨平台开发人员:我之前概述的先前策略实际上不起作用.application.listen即使调用错误(看起来它可能是Tornado中的错误),调用绑定指定的端口.换句话说,您需要确定在调用之前执行的操作listen.
由于我在GNU/Debian上运行我的应用程序,以下对我来说效果很好:
def listen(port):
(osName, machineName, osRelease, osVersion, machineType) = os.uname()
if re.search("arm", machineType):
logging.info("Running on ARM...")
application.listen(port, '0.0.0.0')
else:
logging.info("Running on x86...")
application.listen(port)
Run Code Online (Sandbox Code Playgroud)
不知道此解决方案在其他操作系统或体系结构下的可靠性.
| 归档时间: |
|
| 查看次数: |
2668 次 |
| 最近记录: |