1. 程式人生 > 其它 >python在使用 http.server 做檔案服務時自定義檔案路徑

python在使用 http.server 做檔案服務時自定義檔案路徑

遇到的問題

需要做一個程式給別人簡單的分享檔案,但是不是沒個人的電腦都有python環境所以放棄了命令列使用http.server 預設的路徑時執行時所在的環境

python -m http.server 8080 -d /home

然後找到下面這種方式準備打包成exe給別人使用,但是又遇到個問題,他每次預設的都是自己的執行目錄,沒有辦法自己選定路徑

from http.server import HTTPServer, SimpleHTTPRequestHandler


if __name__ == '__main__':
    ip = ''
    port = 8888
    server = HTTPServer((ip, port), SimpleHTTPRequestHandler)
    server.serve_forever()

解決方法

最後找個一個方法使用python中的functools中的partial模組,
functools模組中partial的使用
這個模組的意思:
返回一個新的部分物件,當被呼叫時,其行為類似於使用位置引數_args_ 和關鍵字引數_關鍵字_呼叫的_func_。如果為呼叫提供了更多引數,則將它們附加到_args_。如果提供了其他關鍵字引數,則它們會擴充套件和覆蓋_關鍵字_。
簡單來說就是 讓這個新的物件 預設就具有你給的引數,只要不去覆蓋的話

from functools import partial  # 匯入模組
from http.server import HTTPServer, SimpleHTTPRequestHandler


if __name__ == '__main__':
    ip = ''
    port = 8888
    # 指定directroy 的路徑 ,返回給Handler這個物件,在去呼叫這個物件
    Handler = partial(SimpleHTTPRequestHandler, directory='/Users/yibai/Downloads')
    server = HTTPServer((ip, port), SimpleHTTPRequestHandler)
    server.serve_forever()

最後就可以寫pyqt寫小型的檔案服務了。