【发布时间】:2018-11-14 19:07:31
【问题描述】:
我的 python 脚本有问题,该脚本应该检查是否在 iptables 中编写了某个规则,如果没有将其添加到那里。
def blockip(packet_ip):
cmd="sudo /sbin/iptables -A INPUT -s "+packet_ip+" -j DROP"
print cmd
if ["$(sudo cat /sbin/iptables --list | grep -- packet_ip)"]:
print "Already Blocked"
else:
subprocess.call(cmd,shell=True)
print packet_ip + " Has been Blocked"
这是我应该处理的函数,但如果满足相同的packet_ip,它就不起作用并在 iptables 中多次写入相同的规则。顺便说一句,在 RPI 上运行,如果有影响的话。
【问题讨论】:
-
if ["$(command)"]不是在 python 中执行命令的正确方法——看起来你已经将 shell 语法与 python 语法混合在一起了。此外,该命令 greps 字符串packet_ip而不是变量的 value。 -
我认为这可能是问题,但我该如何解决?
-
我认为添加“shell”或类似的东西会使问题更容易被发现和回答。
-
正如所写,
if语句总是正确的,所以这个函数应该只打印命令然后打印“Already Blocked”。正如你所说,我看不出它是如何做任何其他事情的。 -
那么应该如何修改它以适应我的目的?我的错误,在我添加 if 语句之前,这确实写了多个规则。之后它会像你说的那样打印“Already Blocked”。
标签: python shell grep raspberry-pi