2016-10-03 9 views
0

os.system(program file_argument))を使用してコマンドラインからプログラムを起動するとき、引数がファイル(空白を含む可能性があります)の場合、他のプログラムに引数を送信する最も良い方法は何ですか?シェルでバックスラッシュまたは引用符でエスケープしますか?

私は、これらのオプションを見てきました:'/dir/file with white space'

  • re.escape(file_name)を使用して、このような文字列を生成します:/dir/file\ with\ white\ space
  • このような文字列を生成します(Pythonの3または shlex.quote(file_name)pipes.quote(file_name)を使用して

    • これらは、呼び出されたプログラムに影響を与える可能性がありますか? (他のオプションはありますか?)他に何か考慮する必要がありますか?シンプルに始めるためながら、os.systemを使用して

    +3

    最も良い方法は 'subprocess.call'です。引数のリストを渡すことができ、引用が自動的に行われます。 –

    +1

    're.escape'は正規表現をエスケープするためのものです。あなたが必要とするものとはまったく異なることをします。 – user2357112

    +0

    @ Jean-FrançoisFabreそれは誤解を招いています。 'subprocess.call([...]) 'では、シェルが関係していないので、引用符は必要ありません。 'subprocess.call( '...'、shell = True)'で 'os.system()'と同じようにクォートする必要があります。一般的には、前者を常に優先する必要があります(特に必要がない場合はシェルを避ける)。 – tripleee

    答えて

    2
    >>> import subprocess 
    >>> subprocess.call(['cat', 'file with space.txt']) 
    

    より複雑なタスクを実行しようとしたとき、分解します。

    もっと前にos.systemをあきらめて、ちょうどsubprocessに精通していたらいいのに。時間の価値がある

    関連する問題