控制字符作为Python的shell参数的路径

时间:2012-04-30 14:29:49

标签: python shell path control-characters

我正在尝试使用某个应用程序打开路径来提交文件。问题是该路径包含各种控制字符,使得打开文件变得困难。下面的代码显示了我上次使用 \ 控制字符前缀的尝试,但它奇怪地多次打开文件(如无限循环)。

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()调用标准打开文件,避免控制字符出现问题?

1 个答案:

答案 0 :(得分:1)

您可以使用os.system模块,而不是使用subprocess,而是避免通过shell传递命令。这意味着你不必担心转义引号或其他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在默认情况下避免使用shell,否则与subprocess.call非常相似。

将重定向stderr作为练习留给读者......