ホームページ  >  記事  >  バックエンド開発  >  Python の `os.system()` 呼び出しでコマンド引数を適切にエスケープする方法

Python の `os.system()` 呼び出しでコマンド引数を適切にエスケープする方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-29 05:48:02870ブラウズ

How to Properly Escape Command Arguments in Python's `os.system()` Calls?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。