将 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。
这个问题是基于我的
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。