使用 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)))
Edit:我接受了使用引号的简单答案,不知道为什么我没有想到这一点;我想是因为我来自 Windows,其中 ' 和 " 的行为有点不同。
关于安全性,我理解这种担忧,但是,在这种情况下,我对 os.system() 提供的快速且简单的解决方案感兴趣,并且字符串的源不是用户生成的,或者至少是由用户输入的受信任的用户(我)。
shlex.quote() https://docs.python.org/3/library/shlex.html#shlex.quote从 python 3 开始做你想做的事。
(Use pipes.quote https://docs.python.org/2/library/pipes.html#pipes.quote同时支持 python 2 和 python 3,
但请注意pipes
自 3.10 起已弃用
并计划在 3.13 中删除)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)