Python 2.7および3.6のコマンドライブラリの代替

Python 2.7および3.6のコマンドライブラリの代替

私の元の質問は次のとおりです。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()

banditsubprocess呼び出しシェルとして使用するすべてのアイテムはまだ安全ではないため、重大度の低い問題が引き続き発生する可能性がありますが、これは避けられません。残りの警告は、コードの潜在的な不安定性を思い出させると考えてください。シェルが実際に呼び出す内容に応じて、文字列定数にハードコーディングされたコマンドか、ユーザー入力か、またはそれに応じて直接確認する必要があります。呼び出しコードの変数?とにかくクリーンアップは常に推奨されます。 Pythonではpipes基準寸法そのような理由で。

おすすめ記事