子进程arp -a比cmd arp -a产生的结果更少

时间:2014-07-08 16:57:42

标签: python python-3.x subprocess

以下代码产生的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列表?

1 个答案:

答案 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)