为了账号安全,请及时绑定邮箱和手机立即绑定

如何逃避os.system()调用?

如何逃避os.system()调用?

猛跑小猪 2019-07-30 15:30:50
如何逃避os.system()调用?使用os.system()时,通常需要将作为参数传递的文件名和其他参数转义为命令。我怎样才能做到这一点?优选地,可以在多个操作系统/壳上工作但特别是用于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()提供的快速简单的解决方案感兴趣,并且字符串的来源要么不是用户生成的,要么至少是由用户输入的。可信用户(我)。
查看完整描述

3 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

也许你有特定的使用理由os.system()。但如果没有,你可能应该使用该subprocess模块。您可以直接指定管道并避免使用shell。

以下内容来自PEP324

Replacing shell pipe line

-------------------------


output=`dmesg | grep hda`

==>

p1 = Popen(["dmesg"], stdout=PIPE)

p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)

output = p2.communicate()[0]


查看完整回答
反对 回复 2019-07-30
  • 3 回答
  • 0 关注
  • 524 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信