私の元の質問は次のとおりです。https://stackoverflow.com/questions/50164551/starting-a-process-with-a-shell-possible-injection-Detected-security-issue
そこでは何の回答も受けられず、ここに交差投稿しました。
ただ代替案を知りたい
import commands
commands.getoutput()
コマンドライブラリ。
オペレーティングシステムやサブプロセスなどを使用してこれを行う方法はありますか?
答え1
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
呼び出しシェルとして使用するすべてのアイテムはまだ安全ではないため、重大度の低い問題が引き続き発生する可能性がありますが、これは避けられません。残りの警告は、コードの潜在的な不安定性を思い出させると考えてください。シェルが実際に呼び出す内容に応じて、文字列定数にハードコーディングされたコマンドか、ユーザー入力か、またはそれに応じて直接確認する必要があります。呼び出しコードの変数?とにかくクリーンアップは常に推奨されます。 Pythonではpipes
基準寸法そのような理由で。
答え2
subprocess
hoeflingの答えによると、「標準」の方法はありますが、外部ライブラリを使用しても問題ない場合は、より現代的な方法を使用できます。
In [1]: import delegator
In [2]: print delegator.run('pwd').out
/home/vince
私はそれをインストールした:
pip install git+https://github.com/kennethreitz/[email protected]
答え3
import subprocess
commands = subprocess
残りのコードをそのままにすると、そのまま動作します。