[解決済み] os.system()コールをエスケープするには?
2022-06-15 06:29:15
質問
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() が提供する迅速で簡単なソリューションに興味があり、文字列のソースはユーザーが生成したものではない、または少なくとも信頼できるユーザー (私) によって入力されたものです。
どのように解決するのですか?
これは私が使っているものです。
def shellquote(s):
return "'" + s.replace("'", "'\\''") + "'"
シェルは常に引用符で囲まれたファイル名を受け取り、 それを問題のプログラムに渡す前に周囲の引用符を削除する。注目すべきは、これは空白やその他の厄介なシェルのメタ文字を含むファイル名の問題を回避することです。
更新 : Python 3.3 以降を使用している場合は shlex.quote を使用してください。
関連
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] scpを使ってリモートからローカルにフォルダをコピーするにはどうしたらいいですか?
-
[解決済み] ワイルドカードマッチングに基づいて、現在のフォルダとサブフォルダ内のすべてのファイルを再帰的に検索するにはどうすればよいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python Decorator 練習問題
-
python implement mysql add delete check change サンプルコード
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
Python入門 openを使ったファイルの読み書きの方法
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない