Hey Guys!
Well before I explain my problem, let me tell you all that I am not a
professional programmer and new to python too. I just write some scripts as and
when required and this time it seems I am stuck somewhere in trying to create
subprocesses.
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. 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:
###########################################
[10172, 'None'] <<< This is the variable where I am
storing process IDs
###########################################
Traceback (most recent call last):
File "C:\python\inscan.py", line 121, in <module>
clas_b()
File "C:\python\inscan.py", line 92, in clas_b
wpid, sts = os.waitpid(retval[i], 0) <<< and passing here to
os.waitpid
OSError: [Errno 10] No child processes
I hope you guys understood! I am pasting my function here. Just have a look
and suggest something for that. I heard fork() is not supported for windows and
that's why I used 'subprocess module'.
def clas_b():
i = 0
IP = ((10,50,89,0,24), (10,50,90,0,24))
retval = ['None', 'None']
for k in IP:
b1 = k[0]; b2 = k[1]; b3 = k[2]
b4 = k[3]; mkb = k[4]
# Call the subprocess using convenience method
#retval[i] = subprocess.call(clas_c(b1, b2, b3, b4, mkb), 0, None,
None, \
# outptr[i], errptr[i], shell=True)
# clas_c actually runs Nmap command and stores results in an output
file
retval[i] = int(subprocess.Popen(clas_c(b1, b2, b3, b4, mkb), \
shell=True).pid)
print "###########################################"
print retval
print "###########################################"
while 1:
wpid, sts = os.waitpid(retval[i], 0)
if os.WIFSTOPPED(sts):
continue
<<< I don't know anything about this
elif os.WIFSIGNALED(sts): <<< I just
found this somewhere and
return -WTERMSIG(sts) <<< pasted to
my program for to test
elif os.WIFEXITED(sts):
return os.WEXITSTATUS(sts)
else:
raise error, "Not stopped, signaled or exited???"
i += 1
Thanks,
Nachiket Joshi
____________________________________________________________________________________
Yahoo! oneSearch: Finally, mobile search
that gives answers, not web links.
http://mobile.yahoo.com/mobileweb/onesearch?refer=1ONXIC
--
http://mail.python.org/mailman/listinfo/python-list