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模块,并避免通过外壳传递您的命令。这意味着您不必担心转义引号或其他 shell 元字符……通常,您不必担心 shell(错误)解释路径的部分。

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 回答