轉義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中文網其他相關文章!