1

我不能使用 python 套接字模块它说:

C:\Users\Owner\Desktop\Coding Projects\chatserver>Transcrypt import_test.py -b
Transcrypt (TM) Python to JavaScript Small Sane Subset Transpiler Version 3.6.4
Copyright (C) Geatec Engineering. License: Apache 2.0

Error in program import_test.py, module _socket, line 49:
        Attempt to load module: _socket
        Can't find any of:
                C:/Users/Owner/Desktop/Coding Projects/chatserver/__javascript__/_socket.mod.js
                C:/Users/Owner/Desktop/Coding Projects/chatserver/__javascript__/_socket.mod.js
                c:/program files (x86)/python36-32/lib/site-packages/transcrypt/modules/__javascript__/_socket.mod.js
                c:/program files (x86)/python36-32/lib/site-packages/transcrypt/modules/__javascript__/_socket.mod.js
                C:/Program Files (x86)/Python36-32/Scripts/__javascript__/_socket.mod.js
                C:/Program Files (x86)/Python36-32/Scripts/__javascript__/_socket.mod.js
                c:/program files (x86)/python36-32/python36.zip/__javascript__/_socket.mod.js
                c:/program files (x86)/python36-32/python36.zip/__javascript__/_socket.mod.js
                c:/program files (x86)/python36-32/DLLs/__javascript__/_socket.mod.js
                c:/program files (x86)/python36-32/DLLs/__javascript__/_socket.mod.js
                c:/program files (x86)/python36-32/lib/__javascript__/_socket.mod.js
                c:/program files (x86)/python36-32/lib/__javascript__/_socket.mod.js
                c:/program files (x86)/python36-32/__javascript__/_socket.mod.js
                c:/program files (x86)/python36-32/__javascript__/_socket.mod.js
                c:/program files (x86)/python36-32/lib/site-packages/__javascript__/_socket.mod.js
                c:/program files (x86)/python36-32/lib/site-packages/__javascript__/_socket.mod.js

Aborted

蟒蛇文件:

class Test:
    def __init__(self):
        print("HI")
        try:
            import socket
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        except Exception as ex:
            print("Error: " + str(ex))
4

1 回答 1

0

关于导入模块,sockets请注意以下几点:

  • Transcrypt 是编译器而不是解释器。这意味着导入是在编译时完成的,以便能够编译导入的模块并将它们包含在生成的代码中。由于它们是编译时的,它们不能是运行时条件的,生成运行时异常等。

  • 如果您需要编译时条件导入,请使用 __pragma__ ('ifdef', ... 这适用于编译时。您将需要 websockets 而不是 CPython sockets 模块,它可能是用 C 编写的,因此不能在浏览器中运行。因为你可以使用任何 JS 库或 API 函数,您可以使用例如 HTML5 web sockets 或任何 JS 套接字库。只需使用它与 JavaScript 完全相同。

  • 一般来说,对于 Transcrypt,使用 JS 库,因为它们最适合在浏览器中完成工作。另见:http ://www.transcrypt.org/docs/html/what_why.html#the-ecosystem-different-batteries

[编辑]

进一步澄清:

您应该只在服务器端使用 Python websockets 包,而不是使用 Trancrypt。

我的意思是,在客户端上,您应该在以下位置使用 JavaScript websockets 功能,如 ao 所述:

https://developer.mozilla.org/en-US/docs/Web/API/WebSocket

https://www.tutorialspoint.com/html5/html5_websocket.htm

http://www.developerfusion.com/article/143158/an-introduction-to-websockets/

由于这些是 JavaScript 工具,它们不需要 sys 或类似的东西。所以注意不要在你的 Transcrypt 客户端代码中导入 websockets,因为这会给你 Python 包,而不是原生可用的 JavaScript 工具。

于 2017-02-01T11:31:17.073 回答