Python编写失败并降低0 CPU使用率

时间:2015-12-26 15:59:58

标签: python subprocess popen

我的脚本总体目标是对/ 8网络进行有效的ping操作。为此,我同时运行32个脚本来扫描每个脚本。

脚本的基础是

import ipaddress
import time
import fileinput
import pingpack
set = 0
mainset =0
while mainset < 8:
    while set < 256:
        net_addr = ("10.{}.{}.0/24".format(mainset,set))
        ip_net = ipaddress.ip_network(net_addr)
        all_hosts = list(ip_net.hosts())
        f_out_file=('{}_Ping.txt'.format(mainset))
    for i in range(len(all_hosts)):
        output = pingpack.ping("{}".format(all_hosts[i]))
        if output != None:
            with open(f_out_file,'a',newline="\n") as file:
                file.write("{}, Y\r\n".format(all_hosts[i]))

    print ("{}".format("Subnet Complete"))
    set = set + 1
set=0

它自己运行并运行的脚本,并在自行运行时给我一个很好的输出。我遇到的问题是,当python进程锁定并停止写入之前,我为每个子网运行其中32个运行大约8个set循环。

我用来启动32的脚本如下

from subprocess import Popen, PIPE
import time
i = 0
count=0
while i < 32:
    process = Popen(['ping{}.py'.format(i),"{}".format(count)], stdout=PIPE, stderr=PIPE, shell=True)
    print(count)
    print(i)
    i = i + 1
    count=count+8
    time.sleep(1)

在这种情况下;是;我确实有32个重复的划线,每个划线改变了不同的/ 13个子部分。它可能和某些人一样有效;但它让它们开始运行。

我如何找到停止这些脚本的原因?

旁注:是的我知道我可以用NMAP或Angry IP Scanner这样做;但它们都需要90多个小时来扫描整个/ 8;我试图将其缩短为可以在更合理的时间范围内运行的东西。

1 个答案:

答案 0 :(得分:1)

您的第一个问题是,当您转到下一个主集时,set永远不会重新设置为零。你的第二个问题是mainset永远不会增加。而不是一对模糊的while循环,为什么不:

for mainset in xrange(8):
    for set in xrange(256):

此外,in range(len(all_hosts))是一种代码气味(事实证明除了写i之外,你永远不会使用all_hosts[i])。为什么不:

        for host in all_hosts: