将 x 数字变量附加到子进程的命令

Append x number variables to a command for subprocess

这个问题是基于我的 关于为子进程创建命令。我可以使用以下代码将一个变量(ip)作为命令的一部分发送:

iplist

8.8.8.8
1.1.1.1

一个ip的代码

with open('iplist', 'r', encoding="utf-8") as f:
    data = f.readlines()
    print(data)
    for line in data:
        ip = line.strip() # strip \n lookup will fail
        cmd = ['./mmdbinspect', '--db', '/usr/local/var/GeoIP/GeoLite2-City.mmdb', ip]
        print(cmd)
        result = subprocess.run(cmd, stdout=subprocess.PIPE)
        print(result.stdout)

我想像这样向这个命令发送 x 个变量 (ip):

cmd = ['./mmdbinspect', '--db', '/usr/local/var/GeoIP/GeoLite2-City.mmdb', '8.8.8.8', '1.1.1.1']

x ip 的代码

with open('iplist', 'r', encoding="utf-8") as f:
    data = f.readlines()
    print(data)
    data1 = [ip.strip() for ip in data] # list comprehension - remove \n from each item in the list
    print(data1)
    data2 = ' '.join(data1)
    print(data2)
    cmd = ['./mmdbinspect', '--db', '/usr/local/var/GeoIP/GeoLite2-City.mmdb', data2]
    print(cmd)
    result = subprocess.run(cmd, stdout=subprocess.PIPE)
    print(result.stdout)

输出

['./mmdbinspect', '--db', '/usr/local/var/GeoIP/GeoLite2-City.mmdb', '8.8.8.8 1.1.1.1']
2020/11/01 13:49:38 could not get records from db /usr/local/var/GeoIP/GeoLite2-City.mmdb: 8.8.8.8 1.1.1.1 is not a valid IP address

如您所见,ip 需要是单独的变量。

如何向 cmd 添加 x 个额外的 ip 变量?

我想你想要:

cmd = ['./mmdbinspect', '--db', '/usr/local/var/GeoIP/GeoLite2-City.mmdb', *data1]

这会将 data1 中的每个 IP 附加到 cmd 作为该列表末尾的唯一项。这是一个例子:

data1 = ['8.8.8.8', '1.1.1.1']
cmd = ['./mmdbinspect', '--db', '/usr/local/var/GeoIP/GeoLite2-City.mmdb', *data1]
print(cmd)

结果:

['./mmdbinspect', '--db', '/usr/local/var/GeoIP/GeoLite2-City.mmdb', '8.8.8.8', '1.1.1.1']

这适用于 data1 中任意数量的 IP。