use var to form name of object
gel
geli at tasmail.com
Wed Jul 5 22:09:03 EDT 2006
gel wrote:
> Bruno Desthuilliers wrote:
>
> > gel wrote:
> > > gel wrote:
> > >
> > >
> > >>Hi
> > >>I would like to pass a variable in and use it as part of a name of an
> > >>object, something like below, where I pass the variable software into
> > >>the function and use it as part of the name of the object so that I can
> > >>append to it using the other vairables. Any suggestions?
> > >>
> > >>
> > >> def a_d(self,software,mac,time,extra):
>
> > >> global d_software
> > >> d_software.software.append([mac,time,extra])
> > >
> > >
> > > I sorted it out
> > >
> > Then do a favour to other persons facing the same problem : share your
> > solution. As a side effect, you'll also have your code checked by lot of
> > confirmed Python programmer !-)
> >
> > --
> > bruno desthuilliers
> > python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
> > p in 'onurb at xiludom.gro'.split('@')])"
>
> OK, I would love to, the reason I did not was for fear of wasting
> peoples time with basic stuff... I ended up doing it a bit differently
>
> what I am doing is using pyro to make a package that can be run on PCs
> to control how many PC on a network are running a piece of software,the
> function
>
> def a_d(self,software,mac):
> global d_software
> d_software[software][0].append(mac)
> return d_software
>
> is in the module on the pyro server. When this object is used on the
> client it adds the clients mac address to the dictionary list. When
> another client is runs the software being watched it checks how many
> are already running by counting the number of mac addresses already in
> there. If the number of PCs already running the software is below the
> number allowed, which is set in the pyro module it is allowed to
> continue to run it. If the limit has been reached the client software
> kills the software, Below is the client and the pyro module...
>
> Client
>
> import wmi
> import time
> import Pyro.core
> c = wmi.WMI()
> o=Pyro.core.getAttrProxyForURI('PYRONAME://:Default.test')
> for interface in c.Win32_NetworkAdapterConfiguration (IPEnabled=1):
> # print interface.Description, interface.MACAddress
> for ip_address in interface.IPAddress:
> mac = interface.MACAddress
> mac = 1
> current_time = time.time()
> sw = "notepad.exe"
>
> #o.a_d(sw, mac, current_time, "Maybe More Extra Stuff too")
>
> while 1:
> time.sleep(1.0)
> ps_li=[]
> for process in c.Win32_Process ():
> # print process.ProcessId, process.Name
> ps_li += [process.Name]
>
> if sw in ps_li:
> if len(o.r_d()[sw][0]) != 0:
> if mac in o.r_d()[sw][0]:
> print "Already in there"
> else:
> #ps_id = ps_li.index(sw)
> if len(o.r_d()[sw][0]) < o.r_l()[sw]:
> o.a_d(sw, mac)
> print "There are some"
> print o.r_d()
>
> else:
> print "There are none"
> for process in c.Win32_Process ():
> if process.Name == "notepad.exe":
> print process.ProcessId, process.Name
> result = process.Terminate ()
> print process.Name +" has been killed"
> else:
> o.a_d(sw, mac)
> print "First in"
> else:
> print sw + " not running"
>
> pyro module
>
> class testclass:
> import wmi
> import time
> global d_software
> global l_notepad
> global d_licence_numbers
> d_licence_numbers = {"notepad.exe":1, "Adobe":1}
> l_notepad =[]
> d_software = {"notepad.exe":[[],[]], "Adobe":[[],[]]}
>
>
> def r_len_d(self):
> return len(d_licence_numbers)
>
> def a_d(self,software,mac):
> global d_software
> d_software[software][0].append(mac)
> return d_software
>
> def r_d(self):
> return d_software
>
> def r_l(self):
> return d_licence_numbers
To make the client side a little less CPU intensive, I would like to
catch the events when a new process starts and when a process ends,
using wmi. That will mean that I dont have to search through all
running processes. Can anyone help with the best way to trap the
starting of a new process and the ending of an existing one?
More information about the Python-list
mailing list