我正在编写一个Python程序,它将下载一个错误的IP地址列表,并在OpenBSD pf中的表中添加/删除它们。程序下载列表,格式化它们(作为IP地址对象),并将它们传递给pfctl
命令。现在我把它作为一个循环,为每个字符串调用pfctl
一次:
for item in addedlist:
subprocess.run(['pfctl', '-t', const.PF_LISTNAME, '-T', 'add',\
str(item)], check=True, stderr=subprocess.DEVNULL)
for item in deletedlist:
subprocess.run(['pfctl', '-t', const.PF_LISTNAME, '-T', 'delete',\
str(item)], check=True, stderr=subprocess.DEVNULL)
哪里:
addedlist
和deletedlist
分别是要添加和删除的IP地址对象的格式化列表。
我想为每个列表运行一次pfctl
命令,并且一次性将addedlist
和deletedlist
传递给命令,因为列表(coughIPv6 * cough *)可能非常冗长。但是,当我尝试这样做时,Python抱怨不期待列表。
任何帮助,将不胜感激。
你必须将item
s连接到参数列表,而不是将items
列表嵌套在其中。
我们还将使用列表推导来对项目调用str
。
subprocess.run(
["pfctl", "-t", const.PF_LISTNAME, "-T", "add"]
+ [str(item) for item in addedlist],
check=True,
stderr=subprocess.DEVNULL,
)
subprocess.run(
["pfctl", "-t", const.PF_LISTNAME, "-T", "delete"]
+ [str(item) for item in deletedlist],
check=True,
stderr=subprocess.DEVNULL,
)