Subprocess.Popen() での変数受け渡しの落とし穴を克服する
多くのスクリプトでは、引数を指定して外部プログラムを呼び出す必要が生じます。これらの引数が変数に格納されている場合、subprocess.Popen() で問題が発生する可能性があります。単純そうに見えるかもしれませんが、このプロセスは特定の落とし穴によって妨げられる可能性があります。
そのような落とし穴の 1 つは、shell=True を使用するときに発生します。このオプションは、Unix システムでは引数の処理が異なるため、予期しない動作が発生します。この課題を解決するには、shell=True をドロップすることをお勧めします。
次のシナリオを考えてみましょう:
import subprocess # Populate a list of arguments args = ["mytool.py"] for opt, optname in zip("-a -x -p".split(), "address port pass".split()): args.extend([opt, str(servers[server][optname])]) args.extend("some additional command".split()) # Run the script without shell=True p = subprocess.Popen([sys.executable or 'python'] + args, stdout=subprocess.PIPE)
このアプローチでは、引数が処理されます。正確に、外部プログラムが意図した入力を受信できるようにします。
外部入力を伴うコマンドに対してshell=Trueを設定すると、セキュリティ上の危険が生じることに注意することが重要です。サブプロセスのドキュメントで説明されているように、この方法を実行すると、スクリプトが潜在的な脆弱性にさらされる可能性があります。
以上がセキュリティリスクを冒さずに変数を安全に「subprocess.Popen()」に渡すにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。