os.system() を使用する場合、多くの場合、コマンドにパラメーターとして渡されるファイル名やその他の引数をエスケープする必要があります。これどうやってするの?できれば複数のオペレーティング システム/シェルで動作するものですが、特に bash で動作します。
私は現在次のことを行っていますが、これにはライブラリ関数、または少なくともよりエレガント/堅牢/効率的なオプションが必要であると確信しています:
def sh_escape(s):
return s.replace("(","\\(").replace(")","\\)").replace(" ","\\ ")
os.system("cat %s | grep something | sort > %s"
% (sh_escape(in_filename),
sh_escape(out_filename)))
編集:引用符を使用するという簡単な答えを受け入れましたが、なぜそれを考えなかったのかわかりません。' と " の動作が少し異なる Windows から来たからだと思います。
セキュリティに関しては、私は懸念を理解していますが、この場合、os.system() が提供する迅速で簡単な解決策に興味があり、文字列のソースはユーザーが生成したものではないか、少なくとも信頼できるユーザー (私)。