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 <[EMAIL PROTECTED]> 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) -- http://mail.python.org/mailman/listinfo/python-list