REALLY need help with iterating a list.

alg agillesp at gmail.com
Mon Jun 11 14:52:53 EDT 2007


Reverse iteration should do the trick, if I understand your problem:

for server in reversed(serverlist):
    ...
    else:
        serverlist.remove(server)

On Jun 11, 11:30 am, Radamand <radam... at gmail.com> wrote:
>     This has been driving me buggy for 2 days, i need to be able to
> iterate a list of items until none are left, without regard to which
> items are removed. I'll put the relevant portions of code below,
> please forgive my attrocious naming conventions.
>     Basically i'm trying to spin up some subprocesses that will ping a
> group of servers and then wait until all of them have completed (good
> or bad), store the ping result and the return code, and move on.
>     The problem comes in the second block, when i try to iterate the
> list of servers and remove the ones that are finished, for some reason
> Python appears to re-index the list when I remove an item and the next
> step through the loop it cant find the item its expecting because the
> indexes have changed.
>     Any assistance would be appreciated...
>
> =============================================================================
> for server in serverlist:
>     ping[server] = subprocess.Popen("ping -c 1 " + str(server) + " 5",
> shell=True, stdout=subprocess.PIPE)
>
> while len(serverlist) > 0:
>     for server in serverlist:
>         if ping[server].returncode==None:
>             ping[server].poll()
>         else:
>             pingresult[server] = ping[server].stdout.read()
>             pingreturncode[server] = ping[server].returncode
>             serverlist.remove(server)





More information about the Python-list mailing list