os.system() を利用してコマンドライン コマンドを実行する場合、次のように渡されるファイル名と引数をエスケープする必要があります。特に bash などのオペレーティング システムでは、パラメータが発生します。これを達成する効果的な方法は次のとおりです。
shlex.quote() を使用したエスケープ関数
Python 3 には、shlex.quote() という名前の便利なエスケープ関数が用意されています。この関数は、あらゆる文字列を、os.system() 呼び出しの引数として安全に利用できる適切にエスケープされたバージョンに効果的に変換します。
<code class="python">import shlex os.system(shlex.quote("cat %s | grep something | sort > %s" % (in_filename, out_filename)))</code>
Python 2 および 3 のエスケープ関数
Python 2 との下位互換性が必要な場合は、shlex.quote() の代わりに Pipes.quote 関数を使用できます。ただし、パイプは Python 3.10 で非推奨となり、Python 3.13 で削除されることに注意してください。
<code class="python">import pipes os.system(pipes.quote("cat %s | grep something | sort > %s" % (in_filename, out_filename)))</code>
セキュリティに関する追加の注意
while os.system()はコマンドを実行するための簡単な方法を提供しますが、セキュリティ上の懸念を認識しておくことが不可欠です。信頼できないソースからの入力を受け入れる場合は注意してください。
以上がPython で os.system() 呼び出しのファイル名と引数を安全にエスケープするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。