(This message was top-posted, and sent off-list. So I'm copying it back to the list, with my response at the end)

Chris Chapman wrote:
Thanks Dave.  You know after trying your suggestion on the command prompt it 
doesn't as a matter of fact.  Not sure why I didn't just try that in windows to 
begin with.  Guess I got stuck more on the python issue then it being the other 
program.

There is an option for it to create an HTML log file, but it's formatted sort 
of strangely.  I'm really not looking to parse through it just for a summary 
like that presented on the terminal.  I'm not sure if you know but I'm guessing 
parsing the HTML would be a lot easier the trying to capture the console output 
from the buffer, huh?  Thanks again for the help.

Chris

Date: Mon, 27 Jul 2009 08:28:51 -0400
From: da...@ieee.org
To: oxydol...@hotmail.com
CC: python-wi...@python.org
Subject: Re: [python-win32] subprocess and stdout

Christopher Chapman wrote:
I'm trying to write a "module" to a larger program.  This module eventually
needs to reference a config file with setup information in it, but I'm not
there yet.  I'm using the subprocess module to run an external antivirus
program and trying to get the output written to a log file, but I keep
getting a weird return.  My code is listed below.  I'm a noob to Python so
I'm not sure if this is a windows specific issue or not, but I'm programming
on windows and more then likely what I'm working on won't be on anything
other then a windows machine.  I'm also writing my code for 3.1 if that
makes any difference.

# Pass target path to scanners command line and write output to a file
# Currently "scan" only targets the McAfee Command Line Scanner
print() print ("Begining scan of " + target)
print()
scan = "scan /all " + target
s = subprocess.Popen(scan,
                     stdout=subprocess.PIPE)
out = s.communicate()[0]
chgout = str(out)
s.wait()
scanlog.write(chgout)
scanlog.close
"
If I change my stdout in s subprocess to None then everything gets written
to the terminal as if I had just run the program straight from the command
line, but when I try piping it to my file "scanlog" then literally the only
return I get in the file is '' or two single quotes.  I've even tried piping
the output and then printing it instead of writing it to a file and I get
the same result.  I've experimented with standard windows command line
commands and using the same syntax was able to pipe directory listings and
other things to my file.  Any ideas what I'm missing here?  Thanks in
advance

Chris Chapman


I suspect it's because of the way the antivirus program is written. I can't be sure what you tried at the command prompt, but have you tried this:

c:\>scan /all > scanlog.txt


If this does not capture to the file, then scan.exe isn't written in the way you're expecting. There are several ways to write directly to a console that do not redirect or pipe.

You might also look to see whether scan has any other commandline options. One of them might be to create a log file.

DaveA


I wouldn't know where to begin trying to capture output that another process sends to its console window. While I'm sure it's possible, I do suspect that parsing the html would be easier. Remember that even if it looks ugly, it is generated by program, and it's quite possible that you could throw away the fluff and end up with a simple summary. There are libraries to make this easier, but I've never used them. If it's valid xhtml, which is by definition valid xml, you might find it useful to use elementree. But most html is buggy, and parsing that takes a more tolerant parser.

DaveA

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to