首頁 > 後端開發 > Python教學 > 如何在 Python 的 `os.system()` 呼叫中正確轉義指令參數?

如何在 Python 的 `os.system()` 呼叫中正確轉義指令參數?

Mary-Kate Olsen
發布: 2024-10-29 05:48:02
原創
889 人瀏覽過

How to Properly Escape Command Arguments in Python's `os.system()` Calls?

轉義os.system() 呼叫中的指令參數

在Python 中使用os.system() 時,確保正確的參數處理是至關重要的。檔案和其他參數通常需要轉義以防止幹擾 shell 的命令。以下是有效轉義各種作業系統和shell(尤其是bash)參數的綜合指南:

使用引號

最簡單的解是將參數括在引號中。單引號(') 防止shell 擴展,而雙引號(") 允許變數替換,但抑制引號的字串內的變數擴展。這種方法在不同平台和shell 中得到廣泛支持,包括bash:

<code class="python">os.system("cat '%s' | grep something | sort > '%s'" 
          % (in_filename, out_filename))</code>
登入後複製

使用shlex 模組

Python 提供了專門為此目的而設計的shlex 模組,它的quote() 函數可以正確轉義用於POSIX shell 的字符串,包括bash:

<code class="python">import shlex

escaped_in_filename = shlex.quote(in_filename)
escaped_out_filename = shlex.quote(out_filename)
os.system("cat {} | grep something | sort > {}".format(
          escaped_in_filename, escaped_out_filename))</code>
登入後複製

使用Pipes 模組(棄用警告!)

對於Python 版本2.x 和3.x 直至3.10,可以使用已棄用的Pipes 模組中的Pipes.quote 作為替代方案請注意,從Python 3.11 開始,管道被標記為刪除:

<code class="python">from pipes import quote

escaped_in_filename = quote(in_filename)
escaped_out_filename = quote(out_filename)
os.system("cat {} | grep something | sort > {}".format(
          escaped_in_filename, escaped_out_filename))</code>
登入後複製

作為一般規則,出於安全原因,用戶生成的輸入不應直接插入系統呼叫中適當的驗證和消毒。

以上是如何在 Python 的 `os.system()` 呼叫中正確轉義指令參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板