将变量传递给子进程

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)