0
os.system(program file_argument))
を使用してコマンドラインからプログラムを起動するとき、引数がファイル(空白を含む可能性があります)の場合、他のプログラムに引数を送信する最も良い方法は何ですか?シェルでバックスラッシュまたは引用符でエスケープしますか?
私は、これらのオプションを見てきました:'/dir/file with white space'
re.escape(file_name)
を使用して、このような文字列を生成します:/dir/file\ with\ white\ space
shlex.quote(file_name)
)
pipes.quote(file_name)
を使用して
-
これらは、呼び出されたプログラムに影響を与える可能性がありますか? (他のオプションはありますか?)他に何か考慮する必要がありますか?シンプルに始めるためながら、
os.system
を使用して
最も良い方法は 'subprocess.call'です。引数のリストを渡すことができ、引用が自動的に行われます。 –
're.escape'は正規表現をエスケープするためのものです。あなたが必要とするものとはまったく異なることをします。 – user2357112
@ Jean-FrançoisFabreそれは誤解を招いています。 'subprocess.call([...]) 'では、シェルが関係していないので、引用符は必要ありません。 'subprocess.call( '...'、shell = True)'で 'os.system()'と同じようにクォートする必要があります。一般的には、前者を常に優先する必要があります(特に必要がない場合はシェルを避ける)。 – tripleee