以下代码产生的ip产量低于arp -a
cmd
产生的产量
arpA_req = Popen('arp -a', stdin=PIPE, stdout=PIPE, stderr=STDOUT)
line = arpA_req.stdout.readline().decode('ascii').rsplit()
print(line)
有谁知道为什么会这样?如果这是一个常见问题,我怎样才能获得更完整的IP列表?
答案 0 :(得分:2)
正如wim所指出的,readline()只读了一行。 要读取所有输出,一种方法是调用communicate:
import subprocess
PIPE, STDOUT = subprocess.PIPE, subprocess.STDOUT
arpA_req = subprocess.Popen(
['arp', '-a'], stdin=PIPE, stdout=PIPE, stderr=STDOUT)
out, err = arpA_req.communicate()
print(out)
或者,要一次处理一行,标准惯用法是使用iter(func, stop_value):
for line in iter(arpA_req.stdout.readline, ''):
print(line)