Nachiket Joshi wrote: > Well before I explain my problem, let me tell you all that > I am not a professional programmer and new to python too.
Welcome to the world of Python, home to professional and non-professional programmers alike! > I just write some scripts as and when required Same could be said of many of us. > The problem is something like this. > I am trying to run nmap scan on my network and for > that I want to start multiple nmap instances (256 at once) > togather and wait till those 256 are over before I start > next lot of 256 instances. My number one query is whether it's a great idea to have *256* nmap instances running simultaneously. But this is not my area, so maybe it's something people commonly do. Howbeit, it's clear from your description below that the problem is running *some number* of simultaneous processes. > Well to test I have put in two > nmap scans in my program and I have succeeded to start > both of them simultaneously (in fact one after another) by using > "subprocess module and Popen". But the problem is when I run a > loop to start both of these nmap instances, they do start BUT > the script then exits to command prompt completing all the executions. > But this is not what I want. I want to wait till both of these nmap > processes are finished and then only exit from script (in fact exit > from that function or loop). Then only I would be able to call next > lot of IP Ranges to scan. I did try os.waitpid() but it gives > following error while running the program: I admit I'm a bit confused both by the description and by the code (not least because the code you're posting isn't self-contained; it's not clear what the all-important clas_c function is doing). Assuming I have a (fake) nmap.py which looks like this: <nmap.py> import sys print sys.argv </nmap.py> then your code (if I understand it) wants to do this, in concept: <code> import os, sys import subprocess TEMPLATE = "192.168.%d.%d" for network in range (256): raw_input ("Network: %s - Press enter..." % (TEMPLATE % (network, 0))) running_processes = [] for machine in range (256): # start an nmap process which does whatever and returns running_processes.append ( subprocess.Popen (["python", "nmap.py", TEMPLATE % (network, machine)]) ) # wait until all 256 nmap processes have finished # before starting the next network while True: for process in running_processes: if process.poll () is None: break else: break </code> Have I understood correctly? If you're not sure what my code is doing, try saving it to two files and running it to see if it gives the result you want. TJG -- http://mail.python.org/mailman/listinfo/python-list