在使用 os.system ()时,通常需要转义作为参数传递给命令的文件名和其他参数。我怎么能这么做?最好是可以在多个操作系统/shell 上工作,但特别是在 bash 上。
我目前正在做以下工作,但是我确信必须有一个库函数来实现这一点,或者至少有一个更优雅/健壮/高效的选项:
def sh_escape(s):
return s.replace("(","\\(").replace(")","\\)").replace(" ","\\ ")
os.system("cat %s | grep something | sort > %s"
% (sh_escape(in_filename),
sh_escape(out_filename)))
编辑: 我已经接受了使用引号的简单回答,不知道为什么我没有想到这一点; 我猜是因为我来自 Windows 的地方’和“表现有点不同。
关于安全性,我理解这种担忧,但是在本例中,我感兴趣的是 os.system ()提供的一种快速而简单的解决方案,而且字符串的源不是用户生成的,或者至少是由受信任的用户(我)输入的。