我正在尝试使用某个应用程序打开路径来提交文件。问题是该路径包含各种控制字符,使得打开文件变得困难。下面的代码显示了我上次使用 \ 控制字符前缀的尝试,但它奇怪地多次打开文件(如无限循环)。
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()调用标准打开文件,避免控制字符出现问题?
答案 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
作为练习留给读者......