如何将字符串列表传递给 Python 中的外部命令?
How do I pass a list of strings to an external command in Python?
我正在编写一个 Python 程序,它将下载一个错误的 IP 地址列表和 add/remove 来自 OpenBSD pf 中的 table 的列表。该程序下载列表,将它们格式化(作为 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
传递给命令,因为列表 (咳咳IPv6*咳咳*) 可能会很长。但是,当我尝试这样做时,Python 抱怨没有得到列表。
如有任何帮助,我们将不胜感激。
您必须将 item
连接到参数列表,而不是在其中嵌套 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,
)
我正在编写一个 Python 程序,它将下载一个错误的 IP 地址列表和 add/remove 来自 OpenBSD pf 中的 table 的列表。该程序下载列表,将它们格式化(作为 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
传递给命令,因为列表 (咳咳IPv6*咳咳*) 可能会很长。但是,当我尝试这样做时,Python 抱怨没有得到列表。
如有任何帮助,我们将不胜感激。
您必须将 item
连接到参数列表,而不是在其中嵌套 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,
)