##能夠寫出獲取終端命令列引數動態繫結埠號的web伺服器程式
獲取執行python程式的終端命令列引數
判斷引數的型別,設定埠號必須是整型
給web伺服器類的初始化方法新增乙個埠號引數,用於繫結埠號
import socket
import threading
import sys
# 定義web伺服器類
# 建立tcp服務端套接字
tcp_server_socket = socket.socket(socket.af_inet, socket.sock_stream)
# 設定埠號復用, 程式退出埠立即釋放
tcp_server_socket.setsockopt(socket.sol_socket, socket.so_reuseaddr, true)
# 繫結埠號
tcp_server_socket.bind(("", port))
# 設定監聽
tcp_server_socket.listen(128)
# 儲存建立成功的伺服器套接字
self.tcp_server_socket = tcp_server_socket
# 處理客戶端的請求
@staticmethod
def handle_client_request(new_socket):
# **執行到此,說明連線建立成功
recv_client_data = new_socket.recv(4096)
if len(recv_client_data) == 0:
print("關閉瀏覽器了")
new_socket.close()
return
# 對二進位制資料進行解碼
recv_client_content = recv_client_data.decode("utf-8")
print(recv_client_content)
# 根據指定字串進行分割, 最大分割次數指定2
request_list = recv_client_content.split(" ", maxsplit=2)
# 獲取請求資源路徑
request_path = request_list[1]
print(request_path)
# 判斷請求的是否是根目錄,如果條件成立,指定首頁資料返回
if request_path == "/":
request_path = "/index.html"
try:
# 動態開啟指定檔案
with open("static" + request_path, "rb") as file:
# 讀取檔案資料
file_data = file.read()
except exception as e:
# 請求資源不存在,返回404資料
# 響應行
# 響應頭
response_header = "server: pws1.0\r\n"
with open("static/error.html", "rb") as file:
file_data = file.read()
# 響應體
response_body = file_data
# 拼接響應報文
response_data = (response_line + response_header + "\r\n").encode("utf-8") + response_body
# 傳送資料
new_socket.send(response_data)
else:
# 響應行
# 響應頭
response_header = "server: pws1.0\r\n"
# 響應體
response_body = file_data
# 拼接響應報文
response_data = (response_line + response_header + "\r\n").encode("utf-8") + response_body
# 傳送資料
new_socket.send(response_data)
finally:
# 關閉服務與客戶端的套接字
new_socket.close()
# 啟動web伺服器進行工作
def start(self):
while true:
# 等待接受客戶端的連線請求
new_socket, ip_port = self.tcp_server_socket.accept()
# 當客戶端和伺服器建立連線程,建立子執行緒
sub_thread = threading.thread(target=self.handle_client_request, args=(new_socket,))
# 設定守護主線程
sub_thread.setdaemon(true)
# 啟動子執行緒執行對應的任務
sub_thread.start()
# 程式入口函式
def main():
print(sys.ar**)
# 判斷命令列引數是否等於2,
if len(sys.ar**) != 2:
print("執行命令如下: python3 ***.py 8000")
return
# 判斷字串是否都是數字組成
if not sys.ar**[1].isdigit():
print("執行命令如下: python3 ***.py 8000")
return
# 獲取終端命令列引數
port = int(sys.ar**[1])
# 建立web伺服器物件
# 啟動web伺服器進行工作
web_server.start()
if __name__ == '__main__':
main()
ipmitool 命令列重啟伺服器
我們所有得伺服器都有乙個console 口,當伺服器到了機房後,我們只需要將這個console 口連上線放通網路,我們就可以實現遠端管理這台server 不需要頻繁得去機房操作,這個console ip 也被叫為bmc ip 我們重啟server 我知道得是有三種方式 1.機房物理重啟 2.cons...
命令列啟動mysql服務
在 計算機網路 課程中曾學過net命令,可以用於啟動後台服務。在mysql中,net命令用於啟動後台伺服器程序mysqld,即後台服務。不過,如果在普通使用者模式下net start mysql是無法啟動mysql服務的,情況如下圖所示。普通使用者模式啟動mysql服務失敗 這是為什麼?原因在於,後...
每次登入伺服器命令列pip conda 命令出錯
參考 變數的問題,就再次更新.bashrc檔案,結果確實是這個問題。解決方案 每次登入是都更新一次環境變數檔案 設定.profile檔案 vim profile更改內容 if running bash if n bash version then include bashrc if it exist...