而是假設路徑開始於一個斜槓,並使用+
串聯,用os.path.join()
創建路徑:
import os.path
basepath = os.path.join(wilixdirectory, 'Users', loggedusr)
cp2 = cp2.lstrip('~/')
cp2 = os.path.abspath(os.path.join(basepath, cp2))
if not cp2.startswith(basepath + os.path.pathsep):
# something is wrong still, the absolute final path is not inside of
# user directory, bail now.
raise ValueError('Not a valid command')
# Perhaps test if os.path.isfile(cp2) is True?
args = [cp2]
if cp3 is not None:
args.append[cp3]
subprocess.call(args)
注意,我剝~
,並/
從cp2
開始要從用戶輸入中刪除任何意外的起始字符,請使用os.path.abspath()
確保路徑是規範路徑,並解決任何./
和../
條目。你需要做然後需要驗證最終結果仍然在用戶的目錄中,而不是在它之外。
您可以使用os.path.isfile()
進行測試,以確定cp2
路徑在運行subprocess.call()
之前是否實際指向實際文件。
你能*顯示*你的代碼?這是什麼環境,有什麼權限? – user2357112
代碼有問題 –
檢查'cp2'的值。這是你期望的嗎?它是否缺少一個主要的斜線,還是它沒有一個應該是的?如果它命名了一個真實文件,您是否有權限訪問該文件? – user2357112