将变量传递给子进程
Pass variable to subprocess
我正在尝试构建一个命令,其中包含一个包含 IP 地址的变量 subprocess,但未传递该变量。
iplist
8.8.8.8
1.1.1.1
代码
with open('iplist', 'r', encoding="utf-8") as f:
data = f.read()
print(data)
cmd = ['./mmdbinspect', '--db', '/usr/local/var/GeoIP/GeoLite2-City.mmdb', '$data']
result = subprocess.run(cmd, stdout=subprocess.PIPE)
print(result.stdout)
输出
8.8.8.8
1.1.1.1
2020/11/01 10:06:13 could not get records from db /usr/local/var/GeoIP/GeoLite2-City.mmdb: $data is not a valid IP address
b''
类似
with open('iplist', 'r', encoding="utf-8") as ip_file:
for ip in ip_file:
cmd = ['./mmdbinspect', '--db', '/usr/local/var/GeoIP/GeoLite2-City.mmdb', ip.strip()]
result = subprocess.run(cmd, stdout=subprocess.PIPE)
print(result.stdout)
使用:
cmd = ['./mmdbinspect', '--db', '/usr/local/var/GeoIP/GeoLite2-City.mmdb', data]
data
是一个变量名。
$data
用于其他语言(如 PHP)。
CYREX 为我指明了正确的方向。谢谢。
下面是最终代码
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)
我正在尝试构建一个命令,其中包含一个包含 IP 地址的变量 subprocess,但未传递该变量。
iplist
8.8.8.8
1.1.1.1
代码
with open('iplist', 'r', encoding="utf-8") as f:
data = f.read()
print(data)
cmd = ['./mmdbinspect', '--db', '/usr/local/var/GeoIP/GeoLite2-City.mmdb', '$data']
result = subprocess.run(cmd, stdout=subprocess.PIPE)
print(result.stdout)
输出
8.8.8.8
1.1.1.1
2020/11/01 10:06:13 could not get records from db /usr/local/var/GeoIP/GeoLite2-City.mmdb: $data is not a valid IP address
b''
类似
with open('iplist', 'r', encoding="utf-8") as ip_file:
for ip in ip_file:
cmd = ['./mmdbinspect', '--db', '/usr/local/var/GeoIP/GeoLite2-City.mmdb', ip.strip()]
result = subprocess.run(cmd, stdout=subprocess.PIPE)
print(result.stdout)
使用:
cmd = ['./mmdbinspect', '--db', '/usr/local/var/GeoIP/GeoLite2-City.mmdb', data]
data
是一个变量名。
$data
用于其他语言(如 PHP)。
CYREX 为我指明了正确的方向。谢谢。
下面是最终代码
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)