Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中将字符串列表传递给外部命令?_Python_Openbsd - Fatal编程技术网

如何在Python中将字符串列表传递给外部命令?

如何在Python中将字符串列表传递给外部命令?,python,openbsd,Python,Openbsd,我正在编写一个Python程序,它将下载一个坏IP地址列表,并从OpenBSD pf中的表中添加/删除这些地址。程序下载列表,格式化它们(作为IP地址对象),并将它们传递给pfctl命令。现在,我让它作为一个循环,为每个字符串调用一次pfctl,因此: for item in addedlist: subprocess.run(['pfctl', '-t', const.PF_LISTNAME, '-T', 'add',\ str(item)], check=True, stde

我正在编写一个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
传递给该命令,因为列表(cougipv6*cough*)可能相当长。但是,当我尝试这样做时,Python抱怨不希望有一个列表


任何帮助都将不胜感激。

您必须将
连接到参数列表,而不是将
列表嵌套在参数列表中

我们还将使用列表理解对项目调用
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,
)

你到底想在列表中通过什么?放弃标准错误似乎是一种可疑的做法。@tripleee,公平的问题。该命令为100000个左右的项中的每一项输出一行。当我让它工作时,我将把它取出并捕获输出。