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

Reply via email to