Re: [Tutor] XP catching execl o/p ?
| Struggling with python XP again. My app needs to know if a | certain program is running on my XP box As a complete alternative, consider using WMI: code - UNTESTED import os, sys import wmi c = wmi.WMI () for process in c.Win32_Process (Name=excel.exe): print Excel is running break else: print Excel is not running /code (Uses: http://timgolden.me.uk/python/wmi.html) TJG This e-mail has been scanned for all viruses by Star. The service is powered by MessageLabs. For more information on a proactive anti-virus service working around the clock, around the globe, visit: http://www.star.net.uk ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] XP catching execl o/p ?
Dave S wrote: Hi all, Struggling with python XP again. My app needs to know if a certain program is running on my XP box Ideal world - I can get the output of 'tasklist.exe' into a string. I have tried os.execl('') It throws the output to the terminal + I need the exact path to the executable (a bit of a trial) and os.startfile('...') it throws the output to a different window, but no exact path needed I'm not sure if this is helpful, but here is a program that uses subprocess.Popen() to capture the output of cmd.exe. It makes a text file which contains all the command help. By Scott David Daniels, taken from http://groups.google.com/group/comp.lang.python/msg/9fa3a3c287e8e2a3?hl=en; import subprocess as subp p = subp.Popen(cmd.exe /X/D/F:ON, stdin=subp.PIPE, stdout=subp.PIPE, stderr=subp.STDOUT) flag = (@@} print p.stdin, PROMPT, flag print p.stdin, HELP print p.stdin, EXIT text = p.stdout.read() p.wait() helptext = text[text.index(flag + 'HELP') + len(flag) + 4 : text.index(flag + 'EXIT')] words = [line.split(None, 1)[0] for line in helptext.split('\n') if line.strip()] commands = [word for word in words if word.isupper()] dest = open('cmd_help.txt', 'wb') p = subp.Popen(cmd.exe /X/D/F:ON, stdin=subp.PIPE, stdout=dest, stderr=subp.STDOUT) print p.stdin, PROMPT () print p.stdin, HELP for command in commands: print p.stdin, HELP, command print p.stdin, EXIT p.wait() dest.close() Kent ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] XP catching execl o/p ?
On Tuesday 05 December 2006 23:32, Alan Gauld wrote: Dave S [EMAIL PROTECTED] wrote Struggling with python XP again. My app needs to know if a certain program is running on my XP box os.execl('') It throws the output to the terminal + I need the exact path to the executable (a bit of a trial) Any ideas how I can catch the output ? Look at the popen family of functions in the os module, and then look at the subporocess module which supercedees them (but the docs are expressed in tems of the oold functions!) Use subprocess because the older popen functions don't always work reliably on Windows - there is a separate popen as part of the winall package, but I think subprocess.Popen works Ok. There is more on this, including a simple example using subprocess, in my OS topic in my tutorial. HTH, OK playing around I knocked up some test code ... #!/usr/bin/env python # -*- coding: iso8859_1 -*- import subprocess a = subprocess.Popen('tasklist.exe', bufsize=0, shell=False, stdout=subprocess.PIPE, stderr=None, stdin=None, universal_newlines=True) op = a.stdout.readlines() for i in op: #print i #print pass #raw_input() This gives me what I need except when it runs windows flashes up a large black terminal window for a split second (yuk) This test would be performed while my app is running so thats not so good :) Any ideas on how to stop it displaying ? Dave ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] XP catching execl o/p ?
On Wednesday 06 December 2006 08:48, Tim Golden wrote: | Struggling with python XP again. My app needs to know if a | certain program is running on my XP box As a complete alternative, consider using WMI: code - UNTESTED import os, sys import wmi c = wmi.WMI () for process in c.Win32_Process (Name=excel.exe): print Excel is running break else: print Excel is not running /code (Uses: http://timgolden.me.uk/python/wmi.html) TJG Just looked at WMI - didn't know it existed ! Am going down the subprocess route first as its 'built in'. If that does not work - hello WMI Cheers Dave This e-mail has been scanned for all viruses by Star. The service is powered by MessageLabs. For more information on a proactive anti-virus service working around the clock, around the globe, visit: http://www.star.net.uk ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] XP catching execl o/p ?
On Wednesday 06 December 2006 11:04, Kent Johnson wrote: Dave S wrote: Hi all, Struggling with python XP again. My app needs to know if a certain program is running on my XP box Ideal world - I can get the output of 'tasklist.exe' into a string. I have tried os.execl('') It throws the output to the terminal + I need the exact path to the executable (a bit of a trial) and os.startfile('...') it throws the output to a different window, but no exact path needed I'm not sure if this is helpful, but here is a program that uses subprocess.Popen() to capture the output of cmd.exe. It makes a text file which contains all the command help. By Scott David Daniels, taken from http://groups.google.com/group/comp.lang.python/msg/9fa3a3c287e8e2a3?hl=en; import subprocess as subp p = subp.Popen(cmd.exe /X/D/F:ON, stdin=subp.PIPE, stdout=subp.PIPE, stderr=subp.STDOUT) flag = (@@} print p.stdin, PROMPT, flag print p.stdin, HELP print p.stdin, EXIT text = p.stdout.read() p.wait() helptext = text[text.index(flag + 'HELP') + len(flag) + 4 : text.index(flag + 'EXIT')] words = [line.split(None, 1)[0] for line in helptext.split('\n') if line.strip()] commands = [word for word in words if word.isupper()] dest = open('cmd_help.txt', 'wb') p = subp.Popen(cmd.exe /X/D/F:ON, stdin=subp.PIPE, stdout=dest, stderr=subp.STDOUT) print p.stdin, PROMPT () print p.stdin, HELP for command in commands: print p.stdin, HELP, command print p.stdin, EXIT p.wait() dest.close() Kent The above is usefull, I am starting to print out these snippets for reference :). I have got subprocess to get the data I am now trying to get rid of the windows terminal flashing on my screen. Cheers Dave ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] XP catching execl o/p ?
[Dave S] | Just looked at WMI - didn't know it existed ! | Am going down the subprocess route first as its 'built in'. | If that does not work - hello WMI Personally, I find having both (and other) tools in my toolbelt useful -- I've just answered another question elsewhere about starting and stopping a process on Win32 using the pywin32 win32process module, so that's another option... Generally subprocess is the recommended approach these days because it's specifically designed to superseded the various popen/spawn/system choices previously available. The only problem is that its general-purpose nature means fossicking around to mimic the relative simplicity of os.popen: code import os pipe = os.popen (tasklist) # skip unwanted headers pipe.readline () pipe.readline () pipe.readline () for line in pipe.readlines (): print line.split ()[0] /code TJG This e-mail has been scanned for all viruses by Star. The service is powered by MessageLabs. For more information on a proactive anti-virus service working around the clock, around the globe, visit: http://www.star.net.uk ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] XP catching execl o/p ?
On Wednesday 06 December 2006 11:43, Dave S wrote: On Tuesday 05 December 2006 23:32, Alan Gauld wrote: Dave S [EMAIL PROTECTED] wrote Struggling with python XP again. My app needs to know if a certain program is running on my XP box os.execl('') It throws the output to the terminal + I need the exact path to the executable (a bit of a trial) Any ideas how I can catch the output ? Look at the popen family of functions in the os module, and then look at the subporocess module which supercedees them (but the docs are expressed in tems of the oold functions!) Use subprocess because the older popen functions don't always work reliably on Windows - there is a separate popen as part of the winall package, but I think subprocess.Popen works Ok. There is more on this, including a simple example using subprocess, in my OS topic in my tutorial. HTH, OK playing around I knocked up some test code ... #!/usr/bin/env python # -*- coding: iso8859_1 -*- import subprocess a = subprocess.Popen('tasklist.exe', bufsize=0, shell=False, stdout=subprocess.PIPE, stderr=None, stdin=None, universal_newlines=True) op = a.stdout.readlines() for i in op: #print i #print pass #raw_input() This gives me what I need except when it runs windows flashes up a large black terminal window for a split second (yuk) This test would be performed while my app is running so thats not so good :) Any ideas on how to stop it displaying ? Dave 10 carrot idiot here :) change from test.py to test.pyw :) dave ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
[Tutor] XP catching execl o/p ?
Hi all, Struggling with python XP again. My app needs to know if a certain program is running on my XP box Ideal world - I can get the output of 'tasklist.exe' into a string. I have tried os.execl('') It throws the output to the terminal + I need the exact path to the executable (a bit of a trial) and os.startfile('...') it throws the output to a different window, but no exact path needed Any ideas how I can catch the output ? Cheers Dave ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] XP catching execl o/p ?
Dave S wrote: Hi all, Struggling with python XP again. My app needs to know if a certain program is running on my XP box Ideal world - I can get the output of 'tasklist.exe' into a string. I have tried os.execl('') It throws the output to the terminal + I need the exact path to the executable (a bit of a trial) and os.startfile('...') it throws the output to a different window, but no exact path needed Any ideas how I can catch the output ? You could try redirecting sys.stdout to a file-like class instance you create. Cheers Dave ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] XP catching execl o/p ?
On Tuesday 05 December 2006 20:58, Luke Paireepinart wrote: Dave S wrote: Hi all, Struggling with python XP again. My app needs to know if a certain program is running on my XP box Ideal world - I can get the output of 'tasklist.exe' into a string. I have tried os.execl('') It throws the output to the terminal + I need the exact path to the executable (a bit of a trial) and os.startfile('...') it throws the output to a different window, but no exact path needed Any ideas how I can catch the output ? You could try redirecting sys.stdout to a file-like class instance you create. OK ... could you give me a bit more on that ? ... probably me being a bit dense :) Cheers Dave Cheers Dave ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] XP catching execl o/p ?
Dave S wrote: On Tuesday 05 December 2006 20:58, Luke Paireepinart wrote: Dave S wrote: Hi all, Struggling with python XP again. My app needs to know if a certain program is running on my XP box Ideal world - I can get the output of 'tasklist.exe' into a string. I have tried os.execl('') It throws the output to the terminal + I need the exact path to the executable (a bit of a trial) and os.startfile('...') it throws the output to a different window, but no exact path needed Any ideas how I can catch the output ? You could try redirecting sys.stdout to a file-like class instance you create. OK ... could you give me a bit more on that ? ... probably me being a bit dense :) Um... #test.py class FileLikeObject(object): def __init__(self,current_stdout): self.data = [] self.oldstdout = current_stdout def write(self,arg): if arg != '\n': self.data.append(arg) def output(self): sys.stdout = self.oldstdout print self.data sys.stdout = self import sys f = FileLikeObject(sys.stdout) sys.stdout = f print hello. f.output() print hi f.output() #--- Be careful playing with the dark magic Don't forget that print goes to stdout. HTH, -Luke Cheers Dave Cheers Dave ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] XP catching execl o/p ?
On Tuesday 05 December 2006 23:32, Alan Gauld wrote: Dave S [EMAIL PROTECTED] wrote Struggling with python XP again. My app needs to know if a certain program is running on my XP box os.execl('') It throws the output to the terminal + I need the exact path to the executable (a bit of a trial) Any ideas how I can catch the output ? Look at the popen family of functions in the os module, and then look at the subporocess module which supercedees them (but the docs are expressed in tems of the oold functions!) Use subprocess because the older popen functions don't always work reliably on Windows - there is a separate popen as part of the winall package, but I think subprocess.Popen works Ok. There is more on this, including a simple example using subprocess, in my OS topic in my tutorial. HTH, Thanks for your help - I will take a look. :) Dave ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor