0

いくつかのアプリケーションでファイルへのパスを開こうとしています。問題は、ファイルを開くのを困難にするさまざまな制御文字がパスに含まれていることです。次のコードは、制御文字の前に\を付ける私の最後の試みを示していますが、奇妙にファイルを何度も開きます (無限ループのように)。

path = path.replace("'", "\\'")
path = path.replace("(", "\\(")
path = path.replace(")", "\\)")
try:
  os.system("%s %s 2>/dev/null &" % (appForExtension[extension], path))
except:
  print "not opened"

制御文字の問題を回避するために、標準的にos.system()呼び出しでファイルを開く方法を知っていますか?

4

1 に答える 1

1

os.systemを使用する代わりに、subprocessモジュールを使用して、シェルを介してコマンドを渡すことを避けることができます。これは、引用符やその他のシェル メタ文字のエスケープについて心配する必要がないことを意味します...そして一般的に、シェルがパスの一部を (誤って) 解釈することについて心配する必要はありません。

import subprocess
res = subprocess.call([appForExtension[extension], path])

言うためのドキュメントsubprocess.call

subprocess.call = call(*popenargs, **kwargs)
    Run command with arguments.  Wait for command to complete, then
    return the returncode attribute.

...これは、デフォルトでシェルの使用を回避することをos.system除いて、と非常に似ていることに気付くでしょう。subprocess.call

リダイレクトstderrは、読者への演習として残されています...

于 2012-04-30T14:39:34.003 に答える