os.system() 呼び出しでのコマンド引数のエスケープ
Python で os.system() を使用する場合、引数が適切に処理されるようにする必要があります。重要な。ファイルやその他のパラメーターは、シェルのコマンドとの干渉を防ぐためにエスケープする必要があることがよくあります。ここでは、さまざまなオペレーティング システムとシェル、特に bash の引数を効果的にエスケープするための包括的なガイドを示します。
引用符の使用
最も簡単な解決策は、引数を引用符で囲むことです。一重引用符 (') はシェルの展開を防ぎ、二重引用符 (") は変数の置換を許可しますが、引用符で囲まれた文字列内での変数の展開は抑制します。このアプローチは、bash:
<code class="python">os.system("cat '%s' | grep something | sort > '%s'" % (in_filename, out_filename))</code>
など、さまざまなプラットフォームやシェルで広くサポートされています。 shlex モジュールの使用
Python は、この目的のために特別に設計された shlex モジュールを提供します。その quote() 関数は、bash を含む POSIX シェルで使用する文字列を適切にエスケープします。
<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>
パイプ モジュールの使用 (非推奨の警告!)
Python バージョン 2.x および 3.x から 3.10 までの場合、非推奨のパイプ モジュールの 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 中国語 Web サイトの他の関連記事を参照してください。