Python

python 2.7 和 3.6 中命令庫的替代方案

  • November 25, 2019

我原來的問題在這裡:https ://stackoverflow.com/questions/50164551/starting-a-process-with-a-shell-possible-injection-detected-security-issue

那裡沒有收到任何答案,所以在這裡交叉發布。

我只是想知道一個替代方案

import commands

commands.getoutput()

命令庫。

有沒有辦法使用 os 或 subprocess 之類的東西來做到這一點?

commands已棄用,應替換為subprocess呼叫。替代品commands.getoutput()subprocess.Popen().communicate()

import subprocess
import shlex


command = shlex.split('/bin/ls -l -a -h')
process = subprocess.Popen(command, stdout=subprocess.PIPE)
stdout, stderr = process.communicate()

bandit可能仍然會給你一個低嚴重性的問題,因為你仍然使用subprocess本身不安全的東西作為呼叫 shell 的任何東西,但這是不可避免的。將剩餘的警告視為對程式碼中潛在不安全性的提醒 - 根據您在 shell 中實際呼叫的內容,您必須自己進行檢查 - 它是硬編碼在字元串常量中的命令,還是使用者輸入,或者取決於呼叫程式碼的變數?在任何情況下,總是建議進行清理,Python 有相應的pipes模組

引用自:https://unix.stackexchange.com/questions/442868