- Rewrite subprocess access to the newer subprocess.Popen module. This seems to work just fine for Windows XP, at least.

This commit is contained in:
Cas Cremers 2007-05-19 14:29:32 +02:00
parent ef2af6b097
commit 688416a351
2 changed files with 34 additions and 13 deletions

View File

@ -9,6 +9,11 @@ import sys
import re
import threading
import StringIO
try:
from subprocess import Popen
AvailablePopen = True
except:
AvailablePopen = False
#---------------------------------------------------------------------------
@ -194,6 +199,9 @@ class AttackThread(threading.Thread):
def makeImage(self,attack):
""" create image for this particular attack """
global AvailablePopen
if Preference.usePIL():
# If we have the PIL library, we can do postscript! great
# stuff.
@ -207,23 +215,25 @@ class AttackThread(threading.Thread):
# command to write to temporary file
(fd2,fpname2) = Tempfile.tempcleaned(ext)
f = os.fdopen(fd2,'w')
(fd3,fpname3) = Tempfile.tempcleaned(ext)
dotfile = os.fdopen(fd3,'w')
self.writeGraph(attack.scytherDot,dotfile)
dotfile.flush()
dotfile.seek(0)
cmd = "dot -T%s >%s" % (type,fpname2)
cmd = "dot -T%s -o%s %s" % (type,fpname2,fpname3)
# execute command
cin,cout = os.popen2(cmd,'b')
self.writeGraph(attack.scytherDot,cin)
cin.flush()
cin.close()
cout.close()
f.flush()
f.close()
# Start the process
if AvailablePopen:
p = Popen(cmd, shell=False)
sts = p.wait()
else:
os.system(cmd)
# Print
print fpname2
raw_input()
#print fpname2
#raw_input()
# if this is done, store and report
attack.filetype = type

View File

@ -11,6 +11,12 @@ import os.path
import sys
import StringIO
import tempfile
try:
from subprocess import Popen
AvailablePopen = True
except:
AvailablePopen = False
#---------------------------------------------------------------------------
@ -192,6 +198,7 @@ class Scyther(object):
output -- string which is the real output
errors -- string which captures the errors
"""
global AvailablePopen
if self.program == None:
raise Error.NoBinaryError
@ -226,7 +233,11 @@ class Scyther(object):
##print self.cmd
# Start the process
os.system(self.cmd)
if AvailablePopen:
p = Popen(self.cmd, shell=False)
sts = p.wait()
else:
os.system(self.cmd)
# reseek
fhe = os.fdopen(fde)