webrepl --- WebREPL 伺服器

此模組公開了 MicroPython WebREPL:一個基於 WebSocket 的 REPL,讓用戶端能透過網路連線連接到開發板的互動式提示字元(並傳輸檔案)。一個託管於 micropython.org/webrepl 的小型靜態頁面作為 JavaScript 用戶端。

WebREPL 預設在 TCP 連接埠 8266 上監聽,並使用 os.dupterm 將 REPL 複製到 WebSocket 串流上。僅支援單一同時連線的用戶端;後續的連線嘗試會被拒絕。

範例:

import webrepl
webrepl.start(password="changeme")
# ... or load the password from webrepl_cfg.py:
# webrepl.start()

函式

webrepl.start(port: int = 8266, password: str | None = None, accept_handler=accept_conn) None

啟動 WebREPL 監聽器。

如果 passwordNone,則密碼會從 webrepl_cfg.py(由 webrepl_setup 建立)載入。當無法匯入 webrepl_cfg 時,會印出警告且伺服器不會啟動。

port 用於選擇要監聽的 TCP 連接埠。

accept_handler 是當有新的 TCP 用戶端連線時所呼叫的可呼叫物件。預設值為 accept_conn,它會在背景的 socket 回呼函式中執行 WebSocket 交握。傳入 None 可讓伺服器以前景模式執行(等同於 start_foreground)。

webrepl.start_foreground(port: int = 8266, password: str | None = None) None

start 的便利包裝函式,它會在前景以同步方式執行接受迴圈,直到有用戶端連線為止。

webrepl.stop() None

關閉監聽 socket 與任何作用中的用戶端連線,並透過 os.dupterm(None) 將 WebREPL 從複製的終端機分離。

webrepl.accept_conn(listen_sock) bool

listen_sock 上接受一個待處理的 TCP 連線並完成 WebSocket 交握。如果已有用戶端連線,則新連線會被拒絕並回傳 False。在成功升級後,產生的 WebSocket 會以 _webrepl._webrepl 包裝並附加為複製的終端機。

公開此函式主要是讓呼叫端可以將其作為 accept_handler 引數提供給 start

webrepl.server_handshake(cl) bool

讀取剛接受之 socket cl 上的 HTTP 請求,並以適當的 Sec-WebSocket-Accept 標頭回覆。如果用戶端請求了有效的 WebSocket 升級則回傳 True,否則回傳 False(此時呼叫端通常會退而透過 send_html 提供 HTML 用戶端)。

webrepl.send_html(cl) None

以一份最小的 HTML 文件回覆 cl 上的 HTTP 請求,該文件會從 static_host 載入 WebREPL JavaScript 用戶端,然後關閉 socket。

常數

webrepl.DEBUG: int

設定為非零值可在 sys.stdout 上啟用 HTTP 請求與 WebSocket 交握的詳細追蹤。預設為 0

webrepl.static_host: str

send_html 所使用之 WebREPL 靜態用戶端的基底 URL。預設為 "https://micropython.org/webrepl/"。可透過在 webrepl_cfg.py 中設定 BASE 或直接重新指派此模組屬性來覆寫。

webrepl.listen_s

目前作用中的監聽 socket,若伺服器已停止則為 None。由 start 設定並由 stop 清除。

webrepl.client_s

目前已連線的用戶端 socket,若無用戶端附加則為 None。由 accept_conn 設定並由 stop 清除。