<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;Dk8HQng5cCp7ImA9WhRQEUs.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341</id><updated>2011-12-06T01:47:13.628-08:00</updated><category term="C++" /><category term="Python" /><category term="UI Automation" /><category term="Chetan Giridhar" /><category term="Python Modules" /><category term="SendKeys in Python" /><category term="kernel" /><category term="SendKeys Module" /><category term="Python SendKeys" /><category term="Perl" /><category term="Windows" /><category term="TechTip" /><category term="SendKeys" /><category term="DOS" /><title>Interesting Scripts!!</title><subtitle type="html">Lookout for scripting experiences, automated tools and frameworks that I develop....</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://tediousscripts.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>42</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/InterestingScripts" /><feedburner:info uri="interestingscripts" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;D0cCR3w7cSp7ImA9WhRSEkk.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-7728355496987041254</id><published>2011-11-13T20:26:00.001-08:00</published><updated>2011-11-13T20:31:06.209-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-13T20:31:06.209-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="UI Automation" /><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><title>Login to Gmail with Win32::IEAutomation</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Win32::IEAutomation;&lt;br /&gt;
my $VERSION = "1.0";&lt;br /&gt;
&lt;br /&gt;
if($#ARGV != 1)&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;{&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;print "\n";&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;print "************************************************************\n";&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;print "Usage: Gmail.pl &lt;username&gt; &lt;password&gt;\n";&lt;/password&gt;&lt;/username&gt;&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;print "Gmail.pl - Login to gmail account with Internet Explorer.\n";&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;print "- Chetan Giridhar \n";&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;print "************************************************************\n";&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;exit(0);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
# Creating new instance of Internet Explorer.&lt;br /&gt;
my $ie = Win32::IEAutomation-&amp;gt;new( visible =&amp;gt; 1, maximize =&amp;gt; 1);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
# Navigating to www.google.com.&lt;br /&gt;
$ie-&amp;gt;gotoURL('http://www.google.com');&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
# Finding hyperlinks and clicking them&lt;br /&gt;
# Using 'linktext:' option (text of the link shown on web page) &lt;br /&gt;
$ie-&amp;gt;getLink('linktext:', "Gmail")-&amp;gt;Click; &lt;br /&gt;
&lt;br /&gt;
my $user = $ARGV[0];&lt;br /&gt;
my $password = $ARGV[1];&lt;br /&gt;
&lt;br /&gt;
# Using 'name:' option&lt;br /&gt;
$ie-&amp;gt;getTextBox('name:', "Email")-&amp;gt;SetValue($user);&lt;br /&gt;
$ie-&amp;gt;getTextBox('name:', "Passwd")-&amp;gt;SetValue($password);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Finding button and clicking it&lt;br /&gt;
# using 'caption:' option&lt;br /&gt;
$ie-&amp;gt;getButton('caption:', "Sign in")-&amp;gt;Click;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-7728355496987041254?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rSKB74JzOkUigLDBkYy60v1I6xA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rSKB74JzOkUigLDBkYy60v1I6xA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rSKB74JzOkUigLDBkYy60v1I6xA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rSKB74JzOkUigLDBkYy60v1I6xA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/1_KXbzh1lcQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/7728355496987041254/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=7728355496987041254" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/7728355496987041254?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/7728355496987041254?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/1_KXbzh1lcQ/login-to-gmail-with-win32ieautomation.html" title="Login to Gmail with Win32::IEAutomation" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2011/11/login-to-gmail-with-win32ieautomation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUHQX06fip7ImA9Wx5aFUo.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-1348759046113812102</id><published>2010-11-12T05:55:00.000-08:00</published><updated>2010-11-12T05:57:10.316-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-12T05:57:10.316-08:00</app:edited><title>PyRebootOps</title><content type="html">&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Often in Windows systems we observe that move or delete operations can’t be  executed on a file if it’s locked. Files can get locked if different processes  start accessing it or if the file has already been loaded in RAM.&lt;/p&gt; &lt;p&gt;Such problems can be resolved by scheduling file operations for the next  system restart before the processes or services start and set locks on the  files.&lt;/p&gt; &lt;p&gt;PyRebootOps is a Python utility that uses windows mechanism for scheduling  operations on a file so that these operations can be executed during next system  restart.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;PyRebootOps&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;  * Schedules – Move, Rename, Delete operations on locked files.&lt;br /&gt;  * View  and Reset scheduled operations.&lt;br /&gt;  * Restart the user system.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;PyRebootOps Help&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;***********************************************************&lt;br /&gt;PyRebootOps1.0:  Schedule file opeartions to be executed&lt;br /&gt;during the next system reboot. –  Chetan  Giridhar&lt;br /&gt;***********************************************************&lt;/p&gt; &lt;p&gt;syntax: PyRebootOps.exe [&lt;switch&gt;...] &lt;source&gt;  &lt;destination&gt;&lt;/p&gt; &lt;p&gt;-move: Moves a file from source to destination.&lt;br /&gt;&lt;source&gt; and  &lt;destination&gt; are required.&lt;/p&gt; &lt;p&gt;-delete: Deletes the file from the harddisk after  reboot.&lt;br /&gt;&lt;destination&gt; not required.&lt;/p&gt; &lt;p&gt;-rename: Renames a file.&lt;br /&gt;&lt;source&gt; and &lt;destination&gt; are  required.&lt;/p&gt; &lt;p&gt;-scheduled: Prints all the scheduled operations for the next reboot.&lt;/p&gt; &lt;p&gt;-reset: Resets all the operations that were previously scheduled.&lt;/p&gt; &lt;p&gt;-reboot: Restarts the system after a timeout of 1 sec.&lt;/p&gt;&lt;p&gt;&lt;a href="http://sourceforge.net/projects/pyrebootops/"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;a title="PyRebootOps" target="_self"&gt;PyRebootOps on sourceforge&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-1348759046113812102?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iI1TxamOQJWiehIA3byt0ksit5Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iI1TxamOQJWiehIA3byt0ksit5Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iI1TxamOQJWiehIA3byt0ksit5Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iI1TxamOQJWiehIA3byt0ksit5Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/iktk2MBhmCk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/1348759046113812102/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=1348759046113812102" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/1348759046113812102?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/1348759046113812102?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/iktk2MBhmCk/pyrebootops.html" title="PyRebootOps" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/11/pyrebootops.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQCQXs7cCp7ImA9WxFaF0w.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-1045661328053177720</id><published>2010-07-21T00:20:00.000-07:00</published><updated>2010-07-21T04:56:00.508-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-21T04:56:00.508-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DOS" /><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><title>DOS: SystemInfo</title><content type="html">&lt;strong&gt;Problem Statement:&lt;/strong&gt;&lt;br /&gt;&lt;div&gt;Using DOS command to get all the information pertaining to the sytem.&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;br /&gt;Solution:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Use of Dos coammnd: systeminfo.&lt;/div&gt;&lt;div&gt;Below is a typical output of systeminfo command on DOS prompt.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_FEJOgPeEtSI/TEbcmv4_89I/AAAAAAAAFIE/mZ9F5N3WXRs/s1600/SystemInfo.png"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 198px; DISPLAY: block; HEIGHT: 320px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5496322953500947410" border="0" alt="" src="http://2.bp.blogspot.com/_FEJOgPeEtSI/TEbcmv4_89I/AAAAAAAAFIE/mZ9F5N3WXRs/s320/SystemInfo.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;Using Perl Script to get OS Name:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;use strict;&lt;/div&gt;&lt;div&gt;system("systeminfo find \"OS Name\" &gt; C:\\temp\\temp.txt");&lt;/div&gt;&lt;div&gt;open(FH, "&lt;", "C:\\temp\\temp.txt");&lt;/div&gt;&lt;div&gt;my $contents = &lt;fh&gt;;&lt;/div&gt;&lt;div&gt;my @osInfo = split(':', $contents);&lt;/div&gt;&lt;div&gt;$osInfo[1] = s/\s\s+//g;&lt;/div&gt;&lt;div&gt;print $osInfo[1];&lt;/div&gt;&lt;div&gt;&lt;br /&gt;#This script would print the OS Name. Like it would print "Microsoft Windows 7 Utlimate" if run on Windows 7 - Ultimate Version of OS.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-1045661328053177720?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/I7WHeDB_IVagrxR60yRgma5FXqU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/I7WHeDB_IVagrxR60yRgma5FXqU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/I7WHeDB_IVagrxR60yRgma5FXqU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/I7WHeDB_IVagrxR60yRgma5FXqU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/nv-IARrvMv0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/1045661328053177720/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=1045661328053177720" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/1045661328053177720?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/1045661328053177720?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/nv-IARrvMv0/dos-systeminfo.html" title="DOS: SystemInfo" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_FEJOgPeEtSI/TEbcmv4_89I/AAAAAAAAFIE/mZ9F5N3WXRs/s72-c/SystemInfo.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/07/dos-systeminfo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYNQng9eyp7ImA9WxFaEE8.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-8401641024266724527</id><published>2010-07-13T03:59:00.000-07:00</published><updated>2010-07-13T04:23:13.663-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-13T04:23:13.663-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><title>Perl: Using WMI in Perl</title><content type="html">&lt;strong&gt;Problem Statement: &lt;/strong&gt;Using WMI in Perl&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;use Win32::OLE;&lt;/p&gt;&lt;p&gt;$instances = Win32::OLE-&gt;GetObject("winmgmts:\\\\localhost\\root\\CIMV2")-&gt;InstancesOf(Win32_LogicalDisk) or die "Cant access WMI";&lt;/p&gt;&lt;p&gt;for my $proc (in $instances)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;printf "%5d %7d \n", $proc-&gt;{ProcessId}, $proc-&gt;{WorkingSetSize};&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;More examples on: &lt;a href="http://www.perlmonks.org/"&gt;http://www.perlmonks.org&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-8401641024266724527?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2KHRP6HHJv7VU3xhZahQuScdDVA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2KHRP6HHJv7VU3xhZahQuScdDVA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2KHRP6HHJv7VU3xhZahQuScdDVA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2KHRP6HHJv7VU3xhZahQuScdDVA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/kP1iC5joZfY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/8401641024266724527/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=8401641024266724527" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/8401641024266724527?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/8401641024266724527?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/kP1iC5joZfY/perl-using-wmi-in-perl.html" title="Perl: Using WMI in Perl" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/07/perl-using-wmi-in-perl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8GQ3w-fyp7ImA9WxFbFkU.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-7852315561586341708</id><published>2010-07-09T05:22:00.000-07:00</published><updated>2010-07-09T06:07:02.257-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-09T06:07:02.257-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Python: Threading in Python</title><content type="html">&lt;strong&gt;Problem Statement:&lt;/strong&gt;&lt;br /&gt;Demonstrate the usage of threading in python.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Scripts:&lt;/strong&gt;&lt;br /&gt;Let's consider an example where we have two scripts, one of them is the "main.py" script that can be considered as parent and the other that would run in threads "log.py".&lt;br /&gt;&lt;br /&gt;Let's first take a look at&lt;br /&gt;"log.py"&lt;br /&gt;---------&lt;br /&gt;import time&lt;br /&gt;&lt;br /&gt;&amp;nbsp;class log:&lt;br /&gt;&amp;nbsp;&amp;nbsp;def __init__(self, times):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.times = times&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;self._bOn = True&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;def start(self):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (self._bOn):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print "in start"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time.sleep(self.times)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;def stop(self):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;self._bOn = False&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;print "in stop"&lt;br /&gt;&lt;br /&gt;log.py contains a class log with constructor that takes argument for time and sets the bOn variable to True.&lt;br /&gt;start() - starts printing "in start" till the time bOn is True.&lt;br /&gt;stop() - prints "in stop" when it is called. It would also stop the start() function as bOn is set to False now.&lt;br /&gt;&lt;br /&gt;Now on to the parent script that would call log.py to run in thread.&lt;br /&gt;"Main.py"&lt;br /&gt;----------&lt;br /&gt;import os&lt;br /&gt;import log&lt;br /&gt;import time&lt;br /&gt;import thread&lt;br /&gt;&lt;br /&gt;obj = log.log(5)&lt;br /&gt;&lt;br /&gt;def startlog():&lt;br /&gt;&amp;nbsp;print "in thread"&lt;br /&gt;&amp;nbsp;obj.start()&lt;br /&gt;&lt;br /&gt;thread.start_new_thread(startlog,())&lt;br /&gt;time.sleep(11)&lt;br /&gt;obj.stop()&lt;br /&gt;&lt;br /&gt;Main.py, imports log.py with constructor argument as "5".&lt;br /&gt;startlog() - prints "in thread" and then would call start() of log.py&lt;br /&gt;startlog() is now run as a thread&lt;br /&gt;Main script sleeps for 11 seconds and then&lt;br /&gt;calls the stop() of log.py&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Explanation:&lt;/strong&gt;&lt;br /&gt;In this example, when Main.py starts running, it imports log.py and sets the argument(time) of the constructor to 5. It then starts a thread for the function startlog() and goes to sleep for 11 seconds.&lt;br /&gt;Now that a thread has started with startlog() function, it prints "in thread", then calls start() of log.py. Now that bOn is True, it prints "in start" and sleeps for 5 seconds as set by Main.py. After 5 seonds again it prints "in start".&lt;br /&gt;During this time the Main.py is still sleeping. When 11 seconds pass by, Main.py comes out of sleep (log.py is still running though) and calls the stop() of log.py. Because of which, start() gets stopped as bOn is now set to False and it prints "in stop".&lt;br /&gt;Thus we have seen, Main.py and log.py both ran in parallel and Main.py could control the execution of log.py as it was run in thread.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-7852315561586341708?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/m0Z12R_x_DShoLuGcWwSAusKlfM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m0Z12R_x_DShoLuGcWwSAusKlfM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/m0Z12R_x_DShoLuGcWwSAusKlfM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m0Z12R_x_DShoLuGcWwSAusKlfM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/cf1EmEaG02o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/7852315561586341708/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=7852315561586341708" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/7852315561586341708?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/7852315561586341708?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/cf1EmEaG02o/python-threading-in-python.html" title="Python: Threading in Python" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/07/python-threading-in-python.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEADSX86eCp7ImA9WxFbEEs.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-6136211443182128216</id><published>2010-07-02T02:22:00.000-07:00</published><updated>2010-07-02T02:26:18.110-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-02T02:26:18.110-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>C++: Get Function Name inside the Function</title><content type="html">&lt;strong&gt;Problem Statement: &lt;/strong&gt;&lt;br /&gt;Recently I faced a problem in C++ where I wanted to know the name of the function inside the function that was being called...Confused?! I meant, if I am writing the definition of function named Func(), I want to know the name "Func" inside the function.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;br /&gt;Solution is the use of &lt;strong&gt;printf("%s", __FUNCTION__);&lt;/strong&gt;&lt;br /&gt;The attribute __FUNCTION__ contains the name of the function which is being executed.&lt;br /&gt;This is what we needed, isn't it?&lt;br /&gt;&lt;br /&gt;Hope this helps!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-6136211443182128216?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LJyg23uglfkI6ALYOjx-p9UsxNQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LJyg23uglfkI6ALYOjx-p9UsxNQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LJyg23uglfkI6ALYOjx-p9UsxNQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LJyg23uglfkI6ALYOjx-p9UsxNQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/Bny_Pjo0fqE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/6136211443182128216/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=6136211443182128216" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/6136211443182128216?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/6136211443182128216?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/Bny_Pjo0fqE/c-get-function-name-inside-function.html" title="C++: Get Function Name inside the Function" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/07/c-get-function-name-inside-function.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYMRn8yfSp7ImA9WxFUFkk.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-2417463929694568423</id><published>2010-06-27T05:19:00.000-07:00</published><updated>2010-06-27T05:36:27.195-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-27T05:36:27.195-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Python: Making Objects Callable</title><content type="html">&lt;strong&gt;Problem Statement:&lt;/strong&gt; Have you ever wandered if we could make an object callable? Yes, I mean just use the object name as if you were calling function! Intersted?&lt;br /&gt;Here's a simple solution!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;br /&gt;class Add:&lt;br /&gt;#class for addition&lt;br /&gt;&amp;nbspdef __init__(self, num1, num2):&lt;br /&gt;&amp;nbsp&amp;nbspself.num1 = num1&lt;br /&gt;&amp;nbsp&amp;nbspself.num2 = num2&lt;br /&gt;&amp;nbsp&amp;nbspprint "Sum of", self.num1, "and", self.num2, "is:"&lt;br /&gt;&lt;br /&gt;&amp;nbspdef __call__(self):&lt;br /&gt;&amp;nbsp&amp;nbspreturn (self.num1 + self.num2)&lt;br /&gt;&lt;br /&gt;add = Add(1,2)&lt;br /&gt;print add()&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;br /&gt;Sum of 1 and 2 is:&lt;br /&gt;3&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Explanation:&lt;/strong&gt;&lt;br /&gt;In this example, when 'add' is created using add = Add(1,2), def __init__() is called, since the constructor is called while object is getting created.&lt;br /&gt;Because of the attribute __call__, the object becomes callable and hence we could use as add(). when add() is used, def __call__() is called.&lt;br /&gt;&lt;br /&gt;Hope it's clear!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-2417463929694568423?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-2-IgV2M6dG8FK3hI7Ua5V4ZIXc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-2-IgV2M6dG8FK3hI7Ua5V4ZIXc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-2-IgV2M6dG8FK3hI7Ua5V4ZIXc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-2-IgV2M6dG8FK3hI7Ua5V4ZIXc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/soNXoq9J7n8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/2417463929694568423/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=2417463929694568423" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/2417463929694568423?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/2417463929694568423?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/soNXoq9J7n8/python-making-objects-callable.html" title="Python: Making Objects Callable" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/06/python-making-objects-callable.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUBRH8yeCp7ImA9WxFUFkk.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-3358012506642988450</id><published>2010-06-25T08:49:00.000-07:00</published><updated>2010-06-27T05:37:35.190-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-27T05:37:35.190-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Python: Knowing the path of the currently running script</title><content type="html">&lt;p&gt;&lt;strong&gt;Problem Statement:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;When we deal with frameworks, how often do we have to import modules. And it doesn't stop there; there arises a need where the imported would in turn import an another module, right? Would debugging an error condition be easy in these cases. If you have dealt with frameworks before, you would definitely understand the complexity of finding the fault location (exact module where the fault lies). Often people using logging mechanisms where they print to a file and start debugging. Wouldn't it be simple if we have a single line of code, just to tell which module is currently running? Was the first module being run when error occurred or was it the second module?&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Solution to this problem is fairly simple. Use of __file__ attribute in python.&lt;/p&gt;&lt;p&gt;__file__ attribute gets you information on the currently running script/module. Let's demonstrate this with an example. Consider, we have a parent script Main.py which imports a module called Module.py. Codes would like these:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Main.py&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;import Module&lt;/p&gt;&lt;p&gt;from Module import method&lt;/p&gt;&lt;p&gt;&lt;strong&gt;print "We're in %r" %__file__&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Module.method()&lt;/p&gt;&lt;p&gt;&lt;/code&gt;&lt;strong&gt;Module.py&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;def method():&lt;/p&gt;&lt;p&gt;&amp;nbsp  import os&lt;/p&gt;&lt;p&gt; &amp;nbsp f = open("C:\\sample.txt", "w")&lt;/p&gt;&lt;p&gt; &amp;nbsp f.write('This is a sample file')&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp  print "We're in %r" %__file__&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;  &amp;nbsp f.close()&lt;/p&gt;&lt;p&gt;&amp;nbsp  os.system("del C:\\sample.txt")&lt;/p&gt;&lt;p&gt;&lt;/code&gt;Now, if we run the parent script Main.py, on command prompt, the output that we get is:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;C:\Python26&gt;Main.py&lt;/p&gt;&lt;p&gt;We're in 'C:\\Python26\\Main.py'&lt;br /&gt;We're in 'C:\\Python26\\Module.py'&lt;/p&gt;&lt;p&gt;When the Main.py was running, __file__ gave us the path of current running script, but when the Module.py was imported and then __file__ was used, it gave the path of the module, and not the path of the parent script.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Utility:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;- We can easily find the path of the current running script.&lt;/p&gt;&lt;p&gt;- Also we can easily find out which module is currently being run. This helps in easy debugging.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-3358012506642988450?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rgoxoTCc7KTkyc5k83G0qnnTQ6U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rgoxoTCc7KTkyc5k83G0qnnTQ6U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rgoxoTCc7KTkyc5k83G0qnnTQ6U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rgoxoTCc7KTkyc5k83G0qnnTQ6U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/imsRacd6hx0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/3358012506642988450/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=3358012506642988450" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/3358012506642988450?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/3358012506642988450?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/imsRacd6hx0/python-knowing-path-of-currently.html" title="Python: Knowing the path of the currently running script" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/06/python-knowing-path-of-currently.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EDRX08fSp7ImA9WxFVFU4.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-971120168334746778</id><published>2010-06-14T08:58:00.000-07:00</published><updated>2010-06-14T09:07:54.375-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-14T09:07:54.375-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Python: MVC Pattern Example</title><content type="html">&lt;b&gt;Problem Statement:&lt;/b&gt; Demonstarte with example, Model-View-Controller Design pattern.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Script:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;import sqlite3&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;class MVCModel:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;    def request(self, id):&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;        # Would query database...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;conn = sqlite3.connect('querydb')&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;c = conn.cursor()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;results = c.execute('''select name from data where id = %d''' %id)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;conn.commit()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;c.close()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;for row in results:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;name = row[0]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;return { "id" : id, "name": name} &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;        &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;class MVCController:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;    def __init__(self):&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;        self.model = MVCModel()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;        self.view = MVCView()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;    def main(self):&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;        post = self.model.request(1)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;        self.view.show(post)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;class MVCView:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;    def show(self, post):&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;        print "%(id)s %(name)s" % post&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Controller = MVCController()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Controller.main()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Consistent to MVC Pattern, &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;the model runs a business logic that pings a database for an id and gets the corresponding name,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;the controller accepts the request, sends it to the model, receives the return data from model and communicates to the view,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;and the view represents the return data.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;You could find a similar example on &lt;a href="http://stackoverflow.com/questions/152101/mvc-tutorial-that-doesnt-rely-on-a-framework"&gt;stackoverflow&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-971120168334746778?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lu7VtaV7bWYiTDzpqiSDCjWSTBc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lu7VtaV7bWYiTDzpqiSDCjWSTBc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lu7VtaV7bWYiTDzpqiSDCjWSTBc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lu7VtaV7bWYiTDzpqiSDCjWSTBc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/i8gjNB8TGh8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/971120168334746778/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=971120168334746778" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/971120168334746778?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/971120168334746778?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/i8gjNB8TGh8/python-mvc-pattern-example.html" title="Python: MVC Pattern Example" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/06/python-mvc-pattern-example.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AMRnc4eip7ImA9WxFWE0Q.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-2286169138989139253</id><published>2010-06-01T05:29:00.000-07:00</published><updated>2010-06-01T05:36:27.932-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-01T05:36:27.932-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DOS" /><title>DOS: Create a 0KB file</title><content type="html">&lt;b&gt;Problem Statement:&lt;/b&gt;&lt;div&gt;I want to create a 0KB file using a DOS Command.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Here's how to do it:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Just Run-&gt;cmd and type in &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;goto &gt;&gt; "Filepath"&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Since goto doesn't lead to any code execution its a command that is successful and since there is no return of the goto command, there is no data added to the file and hence the filesize is 0KB. Solves the purpose!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Just a try!&lt;/b&gt;&lt;/div&gt;&lt;div&gt;One could try "&lt;i&gt;cls &gt;&gt; "Filepath" &lt;filepath&gt;&lt;/filepath&gt;&lt;/i&gt;"; but this doesn't work as it adds a binary character in the file to be created.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-2286169138989139253?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ce8Ndlj7oNHoY17l07KXO_Z2-nE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ce8Ndlj7oNHoY17l07KXO_Z2-nE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ce8Ndlj7oNHoY17l07KXO_Z2-nE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ce8Ndlj7oNHoY17l07KXO_Z2-nE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/49uPTcEfEd4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/2286169138989139253/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=2286169138989139253" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/2286169138989139253?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/2286169138989139253?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/49uPTcEfEd4/dos-create-0kb-file.html" title="DOS: Create a 0KB file" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/06/dos-create-0kb-file.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AFRHYzeCp7ImA9WxFXF0s.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-7583517793880844457</id><published>2010-05-24T21:13:00.000-07:00</published><updated>2010-05-24T21:28:35.880-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-24T21:28:35.880-07:00</app:edited><title>Perl: One liner for Search and Replace in Multiple Files</title><content type="html">&lt;b&gt;Problem Statment:&lt;/b&gt;&lt;div&gt;&lt;b&gt;&lt;/b&gt; Want to search a nd replace a string in multiple files? That to in one line? Simple! Read ahead..&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Solution:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Install Perl and use Perl single line execution ie perl -e&lt;/div&gt;&lt;div&gt;Here's the actual statement taht will do the trick:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;perl -pi -i.back -e 's/&lt;find&gt;/&lt;reokacestring&gt;/g;' *.txt&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Explaination:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;perl.exe is of course required for you to run the script.&lt;/div&gt;&lt;div&gt;-p : runs over the complete files.&lt;/div&gt;&lt;div&gt;-i  : edits the files required.&lt;/div&gt;&lt;div&gt;-e : execute the script.&lt;/div&gt;&lt;div&gt;-i.bak : this creates a back-up of the file that is opened for editing.&lt;/div&gt;&lt;div&gt;*.txt : Search and Replace operation works on all files with extension '.txt'.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Small Tip: this is an important interview question. Adds more interest to the post, isn't it? :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hope this helps!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-7583517793880844457?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6lA5JP7FpTgIp0LMzC57YSUKIb0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6lA5JP7FpTgIp0LMzC57YSUKIb0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6lA5JP7FpTgIp0LMzC57YSUKIb0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6lA5JP7FpTgIp0LMzC57YSUKIb0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/9R3z2a_ZRZM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/7583517793880844457/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=7583517793880844457" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/7583517793880844457?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/7583517793880844457?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/9R3z2a_ZRZM/perl-one-liner-for-search-and-replace.html" title="Perl: One liner for Search and Replace in Multiple Files" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/05/perl-one-liner-for-search-and-replace.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUABQno5fSp7ImA9WxFUFUg.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-4437162580778081638</id><published>2010-05-16T21:06:00.000-07:00</published><updated>2010-06-26T05:02:33.425-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-26T05:02:33.425-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="kernel" /><title>Kernel: Finding drivers that are not digitally signed</title><content type="html">&lt;b&gt;Problem Statement:&lt;/b&gt; &lt;div&gt;Finding drivers on a user system that are not digitally signed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Solution:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Windows provides a tool that hist the nail on its head. &lt;i&gt;File Signature Verification &lt;/i&gt;Tool by Windows helps the user to find files that are not digitally signed. Since we are interested in drivers, we could target a folder C:\Windows\System32\drivers and find all the driver (.sys) files that are not digitally signed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Using File Signature Verification Tool:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_FEJOgPeEtSI/S_DI8oU1DEI/AAAAAAAAFGA/F3ie_CF49ts/s1600/fsv1.JPG"&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; WIDTH: 320px; FLOAT: left; HEIGHT: 190px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5472094491197639746" border="0" alt="" src="http://2.bp.blogspot.com/_FEJOgPeEtSI/S_DI8oU1DEI/AAAAAAAAFGA/F3ie_CF49ts/s320/fsv1.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;StartUp:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;1. Goto Start-&gt;Run.&lt;/div&gt;&lt;div&gt;2. Type in sigverif. This will start the tool (sigverif.exe) and a file signature &lt;/div&gt;&lt;div&gt;verification window pops-up.&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="FONT-WEIGHT: bold" class="Apple-style-span"&gt;Searching Options:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;User can search files of specified extensions in a specified folder.&lt;/div&gt;&lt;div&gt;- Check the option that says "Lokk for other files that are not digitally signed"&lt;/div&gt;&lt;div&gt;Under Serach Options:&lt;/div&gt;&lt;div&gt;- Select the file type that can be used for scanning. (like *.sys, *.dll or*.*)&lt;/div&gt;&lt;div&gt;- Select the folder "Look in this folder" option by browsing to the location.&lt;/div&gt;&lt;div&gt;- Check "Include subfolders" for recursive directory listing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Logging Options:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;User can configure the logging options as follows:&lt;/div&gt;&lt;div&gt;- Check the "Save the file signature verification results to a log file"&lt;/div&gt;&lt;div&gt;Under logging options:&lt;/div&gt;&lt;div&gt;- Select "Append/Overwrite existing log file" to either append the results of differents tests in a log file or overwrite the log file for a new test that's triggered every time.&lt;/div&gt;&lt;div&gt;- Log file name: Mention the log file name with appropriate path. Note: Pathnames need not to have (\\) as escape sequences.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Running the tool:&lt;/b&gt; &lt;/div&gt;&lt;div&gt;After configuring the tool. click OK and press Start. The tool now starts scanning all the files in all the configured folders to find all the files matching the configuration criterion that are not digitally signed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Report:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;A report of the test is genetated in a log file (configured by user in logging options) that gibes information on:&lt;/div&gt;&lt;div&gt;- Files that are scanned with the folder structure path.&lt;/div&gt;&lt;div&gt;- Files that are digitally signed with information on:&lt;/div&gt;&lt;div&gt;* File Modified date.&lt;/div&gt;&lt;div&gt;* File Version Information, if available.&lt;/div&gt;&lt;div&gt;* Catalog file information in which the file can be found.&lt;/div&gt;&lt;div&gt;* Signing Authority.&lt;/div&gt;&lt;div&gt;- Files that could not be scanned.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Case Study:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Let's say we want to find all the drivers present in C:\Windows\System32\drivers folders and check if they are digitally signed or not. Here are some snapshots that depict the configuration required.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;System Specs:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Running the test on WINXP SP3 32 bit system.&lt;/div&gt;&lt;div&gt;2 GB RAM and 320 GB HDD.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Searching Options:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 286px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5472095170431894018" border="0" alt="" src="http://4.bp.blogspot.com/_FEJOgPeEtSI/S_DJkKq5QgI/AAAAAAAAFGI/d5a0ULTg-EQ/s320/fsv2.JPG" /&gt; &lt;div style="TEXT-ALIGN: center"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="FONT-WEIGHT: bold" class="Apple-style-span"&gt;Logging Options:&lt;/span&gt; &lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 286px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5472095627741189570" border="0" alt="" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/S_DJ-yR7VcI/AAAAAAAAFGQ/6XDJHw2G8yE/s320/fsv3.JPG" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;We have now configured the tool check: &lt;div&gt;- All the driver files&lt;/div&gt;&lt;div&gt;- Under C:\Windows\System32\drivers folder&lt;/div&gt;&lt;div&gt;- Log the results in SIGVERIF.TXT file.&lt;/div&gt;&lt;div&gt;- Running the tool would yield the results on a UI (in case of files that are not digitally signed) and in the log file.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Results of case Study:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;While running the test for the case study, it found some drivers on my laptop that were not digitally signed. Here's a snapshot depicting the unsigned driver files.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_FEJOgPeEtSI/S_DLa2WdNcI/AAAAAAAAFGY/patm7-L0eBk/s1600/fsv5.JPG"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 190px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5472097209381893570" border="0" alt="" src="http://3.bp.blogspot.com/_FEJOgPeEtSI/S_DLa2WdNcI/AAAAAAAAFGY/patm7-L0eBk/s320/fsv5.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;Contents of SIGVERIF.TXT Log File:&lt;/b&gt;&lt;br /&gt;&lt;div&gt;********************************&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Microsoft Signature Verification&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Log file generated on 5/17/2010 at 9:59 AM&lt;/div&gt;&lt;div&gt;OS Platform: Windows 2000 (x86), Version: 5.1, Build: 2600, CSDVersion: Service Pack 3&lt;/div&gt;&lt;div&gt;Scan Results: Total Files: 237, Signed: 229, Unsigned: 7, Not Scanned: 1&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;User-specified search path: *.*&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;User-specified search pattern: C:\WINDOWS\system32\drivers&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;File Modified Version Status Catalog Signed By&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;------------------ ------------ ----------- ------------ ----------- -------------------&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;[c:\windows\system32\drivers]&lt;/b&gt;&lt;/div&gt;&lt;div&gt;1028_dell_lat_d820.m 2/25/2009 None Not Signed N/A &lt;/div&gt;&lt;div&gt;1394bus.sys 4/14/2008 2:5.1 Signed NT5.CAT Microsoft Windows Component Publisher&lt;/div&gt;&lt;div&gt;acpi.sys 4/14/2008 2:5.1 Signed NT5.CAT Microsoft Windows Component Publisher&lt;/div&gt;&lt;div&gt;acpiec.sys 4/14/2008 2:5.1 Signed NT5.CAT Microsoft Windows Component Publisher&lt;/div&gt;&lt;div&gt;aec.sys 4/13/2008 2:5.1 Signed NT5.CAT Microsoft Windows Component Publisher&lt;/div&gt;&lt;div&gt;aegisp.sys 2/25/2009 3.4.9.0 Not Signed N/A &lt;/div&gt;&lt;div&gt;afd.sys 8/14/2008 2:5.1 Signed KB956803.cat Microsoft Windows Component Publisher&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style="FONT-WEIGHT: normal" class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;Unscanned Files:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;------------------&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;[c:\windows\system32\drivers]&lt;/b&gt;&lt;/div&gt;&lt;div&gt;sptd.sys The process cannot access the file because it is being used by another process.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thus the user gets the information on all the Digitally Signed and Unsigned driver files.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-4437162580778081638?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LToxdUqPOv5v7q4eaDIE9BgCGSg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LToxdUqPOv5v7q4eaDIE9BgCGSg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LToxdUqPOv5v7q4eaDIE9BgCGSg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LToxdUqPOv5v7q4eaDIE9BgCGSg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/beghGSM755Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/4437162580778081638/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=4437162580778081638" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/4437162580778081638?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/4437162580778081638?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/beghGSM755Q/kernel-finding-drivers-that-are-not.html" title="Kernel: Finding drivers that are not digitally signed" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_FEJOgPeEtSI/S_DI8oU1DEI/AAAAAAAAFGA/F3ie_CF49ts/s72-c/fsv1.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/05/kernel-finding-drivers-that-are-not.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08CSHc_eCp7ImA9WxFXEE4.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-2042534892870859781</id><published>2010-05-16T09:25:00.000-07:00</published><updated>2010-05-16T10:44:29.940-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-16T10:44:29.940-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="kernel" /><title>Kernel: Finding drivers loaded on user system</title><content type="html">&lt;b&gt;Problem Statement:&lt;/b&gt;&lt;div&gt;Find all the drivers that are loaded on user system and get the information pertaining to code,  initialiazed and un- initialiazed static data and driver paging.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Solution:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Drivers.exe, a tool from WinDDK helps the user in finding all the drivres that are loaded on user system.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Drivers tool can be found at &lt;i&gt;C:\winddk\7600.16385.1\tools\Other\i386&lt;/i&gt; location of Winddk once the kit is installed on your system.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Using the tool:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;1. Go to the command prompt.&lt;/div&gt;&lt;div&gt;2. Browse to the location where drivers.exe is present.&lt;/div&gt;&lt;div&gt;3. Run the command: "drivers.exe &gt;&gt; C:\report.txt"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This will save the information on all the drivers that were loaded on the user system on the harddisk location C:\report.txt.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Information obtained from the tool:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;ModuleName:&lt;/b&gt; Represents the driver filename.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Code:&lt;/b&gt; Indicates the non-paged code in the driver file in bytes.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Data:&lt;/b&gt; Represents the initialiazed static data of the driver file in bytes.&lt;/div&gt;&lt;div&gt;&lt;b&gt;BSS:&lt;/b&gt; Un-initialized static data in the image. Generally initialized to 0 or NULL.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Paged:&lt;/b&gt; Represets the data that is paged by the driver, in Bytes.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Init:&lt;/b&gt; Indicates the data that is not needed after the driver is initialized. Represented inBytes.&lt;/div&gt;&lt;div&gt;&lt;b&gt;LinkDate:&lt;/b&gt; Its the date when the driver was linked.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Drivers.exe Output:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;------------------------------------------------------------------------------&lt;/div&gt;&lt;div&gt;&lt;b&gt;   ModuleName    &lt;/b&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;Code    &lt;/b&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;Data     &lt;/b&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;Bss   Paged    &lt;/b&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;b&gt;  &lt;/b&gt;&lt;/span&gt;&lt;b&gt;Init          LinkDate&lt;/b&gt;&lt;/div&gt;&lt;div&gt;------------------------------------------------------------------------------&lt;/div&gt;&lt;div&gt;ntkrnlpa.exe  &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;479232  106496   0 &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;1183744  &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;180224  &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Tue Feb 16 18:55:00 2010&lt;/div&gt;&lt;div&gt;hal.dll   &lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;35968   &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;42496    0   &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;30976   &lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;15488  &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Mon Apr 14 00:01:27 2008&lt;/div&gt;&lt;div&gt;KDCOM.DLL    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;2560     &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;256         0    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;1280     &lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;512  &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Sat Aug 18 02:19:10 2001&lt;/div&gt;&lt;div&gt;BOOTVID.dll    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;5632    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;3584      0      0     &lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;512  &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Sat Aug 18 02:19:09 2001&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Tool Utility:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;1. The tool can be used to identify if a particular driver is loaded on the user system.&lt;/div&gt;&lt;div&gt;2. Could verify if a driver loads on different operating systems and in different modes like Normal or Safe operating modes.&lt;/div&gt;&lt;div&gt;3. User can run the tool twice with in specified time frame and compare the results to check if there are any issues loading a driver under test.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Supported OS:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;I have used the tool on the following platforms and it works fine.&lt;/div&gt;&lt;div&gt;- WINXP SP3 x32&lt;/div&gt;&lt;div&gt;- WIN 7 Ultimate x32&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-2042534892870859781?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MIkydMWLmIc-u_FOGWx4KAsyiso/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MIkydMWLmIc-u_FOGWx4KAsyiso/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MIkydMWLmIc-u_FOGWx4KAsyiso/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MIkydMWLmIc-u_FOGWx4KAsyiso/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/SnqeldfgUIg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/2042534892870859781/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=2042534892870859781" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/2042534892870859781?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/2042534892870859781?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/SnqeldfgUIg/kernel-find-loaded-drivers.html" title="Kernel: Finding drivers loaded on user system" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/05/kernel-find-loaded-drivers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYGRH47eCp7ImA9WxFQEU8.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-2758558866273167563</id><published>2010-05-05T21:46:00.000-07:00</published><updated>2010-05-05T22:02:05.000-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-05T22:02:05.000-07:00</app:edited><title>Python: Get and Set FileAttributes</title><content type="html">&lt;div&gt;&lt;b&gt;Problem Statement:&lt;/b&gt; &lt;/div&gt;&lt;div&gt;Getting and Setting File Attributes in python&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Code Implementation:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;import os, win32file, win32con, win32api&lt;/div&gt;&lt;div&gt;import sys&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;def Getfileattrib(filepath):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;""" Will check for a particular attribute is enabled for a file or not"""&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;try:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;attributes = []&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;attrib = win32file.GetFileAttributes(filepath)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;if not os.path.isfile(filepath):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;print filepath + ": File Not Found"&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;print "Exiting..."&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;sys.exit(1)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;if((attrib &amp;amp; win32con.FILE_ATTRIBUTE_ARCHIVE)):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;attributes.append("A")&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;if((attrib &amp;amp; win32con.FILE_ATTRIBUTE_SYSTEM)):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;attributes.append("S")&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;if((attrib &amp;amp; win32con.FILE_ATTRIBUTE_HIDDEN)):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;attributes.append("H")&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;if((attrib &amp;amp; win32con.FILE_ATTRIBUTE_READONLY)):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;attributes.append("R")&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;return attributes&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;except Exception:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;raise&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;def Setfileattrib(filepath, attributes):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;""" Will set attributes for a file taking list of attributes in a list"""&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;try:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;if not os.path.isfile(filepath):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;print filepath + ": File Not Found"&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;print "Exiting..."&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;for attribute in attributes:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;os.system("attrib +%s %s" % (attribute.upper(), filepath))&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;except Exception:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;raise &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-2758558866273167563?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/28em7A29j_B3lAYyehQ-WofXBsk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/28em7A29j_B3lAYyehQ-WofXBsk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/28em7A29j_B3lAYyehQ-WofXBsk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/28em7A29j_B3lAYyehQ-WofXBsk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/2NFj297CV_w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/2758558866273167563/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=2758558866273167563" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/2758558866273167563?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/2758558866273167563?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/2NFj297CV_w/python-get-and-set-fileattributes.html" title="Python: Get and Set FileAttributes" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/05/python-get-and-set-fileattributes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcEQH4ycSp7ImA9WxFQFUo.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-8126426427890424504</id><published>2010-05-05T08:41:00.000-07:00</published><updated>2010-05-11T02:26:41.099-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-11T02:26:41.099-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="TechTip" /><title>TechTip: Windows Autologon using UI</title><content type="html">My last post talks about how to enable logon using regitsry changes...&lt;div&gt;Here's something that can be done using an UI.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Steps:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;1. Go to Run and type &lt;b&gt;"cotrol userpassword2".&lt;/b&gt;&lt;/div&gt;&lt;div&gt;2. This would take you to &lt;b&gt;"User Accounts"&lt;/b&gt; screen where all the users for your machine are listed.&lt;/div&gt;&lt;div&gt;3. Under this uncheck the option &lt;i&gt;"user must enter a username and password to use this computer".&lt;/i&gt;&lt;/div&gt;&lt;div&gt;4. Click on &lt;i&gt;"Apply", &lt;/i&gt; which will take you to &lt;b&gt;"Automatically Logon"&lt;/b&gt; Screen.&lt;/div&gt;&lt;div&gt;5. Enter the Username and Password for the User you want to enable automatic logon.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And you are done!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can get more methods on this at: &lt;a href="http://www.logonexpert.com/freeautologon.html"&gt;http://www.logonexpert.com/freeautologon.html&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-8126426427890424504?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/B80DnoHCVyF4a8ULSWCcuA0O9zo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B80DnoHCVyF4a8ULSWCcuA0O9zo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/B80DnoHCVyF4a8ULSWCcuA0O9zo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B80DnoHCVyF4a8ULSWCcuA0O9zo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/4bLxjKB6reg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/8126426427890424504/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=8126426427890424504" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/8126426427890424504?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/8126426427890424504?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/4bLxjKB6reg/techtip-windows-autologon-using-ui.html" title="TechTip: Windows Autologon using UI" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/05/techtip-windows-autologon-using-ui.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYHRX45fCp7ImA9WxFQFUo.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-3405599532674652262</id><published>2010-05-04T21:23:00.000-07:00</published><updated>2010-05-11T02:28:54.024-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-11T02:28:54.024-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DOS" /><title>DOS: Batch Script to enable Windows Logon through Registry</title><content type="html">&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Problem Statement:&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style=" font-weight: normal; white-space: pre; "&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Script to enable Windows Logon through Registry changes.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" white-space: pre;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Batch Script Contents:&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:Arial, serif;font-size:100%;"&gt;&lt;span class="Apple-style-span"  style=" white-space: pre;font-size:13px;"&gt;&lt;b&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;REG ADD "HKLM\software\Microsoft\windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d USERNAME /f&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;REG ADD "HKLM\software\Microsoft\windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d PASSWORD /f&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;REG ADD "HKLM\software\Microsoft\windows NT\CurrentVersion\Winlogon" /v AuotAdminLogon /t REG_SZ /d 1 /f&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;REG ADD "HKLM\software\Microsoft\windows NT\CurrentVersion\Winlogon" /v ForceAutoLogon /t REG_SZ /d 1 /f &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;**&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;**Note:&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; Run the first three commands for Windows XP and above OS. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;If working on Windows 2K use all the four commands.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms', serif;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms', serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Utility:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms', serif;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;You could now use this script on the system where you want to enable auto logon.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms', serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small; font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="  white-space: normal; "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;You can get more methods on this at: &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.logonexpert.com/freeautologon.html"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;http://www.logonexpert.com/freeautologon.html&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-3405599532674652262?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/s6Nm-vuz-ZXDsq2FvCZ65z5vgE0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/s6Nm-vuz-ZXDsq2FvCZ65z5vgE0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/s6Nm-vuz-ZXDsq2FvCZ65z5vgE0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/s6Nm-vuz-ZXDsq2FvCZ65z5vgE0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/6jCQsF9Q_K8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/3405599532674652262/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=3405599532674652262" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/3405599532674652262?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/3405599532674652262?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/6jCQsF9Q_K8/dos-batch-script-to-enable-windows.html" title="DOS: Batch Script to enable Windows Logon through Registry" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/05/dos-batch-script-to-enable-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcCRXo4eyp7ImA9WxFRFU8.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-5592048677383710195</id><published>2010-04-28T22:36:00.000-07:00</published><updated>2010-04-28T22:47:44.433-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-28T22:47:44.433-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Python: Profiler</title><content type="html">&lt;b&gt;Problem Statement:&lt;/b&gt;&lt;div&gt;Profiling your python script. &lt;/div&gt;&lt;div&gt;A &lt;em&gt;profiler&lt;/em&gt; is a program that monitors  performance of a  program during run time and provides a lot of information on the program.&lt;/div&gt;&lt;div&gt;Yes a module in Python that can do it easily for you!&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Solution - Case Study:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Let's profile the Service class that I posted just before this blog.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Steps:&lt;/i&gt;&lt;/div&gt;&lt;div&gt;1.  On the cmd prompt goto the Python installation directory.&lt;/div&gt;&lt;div&gt;2. Execute the command: python.exe -m cProfile Services.py&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Output of the profiler:&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;  907 function calls (893 primitive calls) in 0.105 CPU seconds&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;   Ordered by: standard name&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;   ncalls  tottime  percall  cumtime  percall filename:lineno(function)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 &lt;string&gt;:1(&lt;module&gt;)&lt;/module&gt;&lt;/string&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 &lt;string&gt;:1(error)&lt;/string&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 &lt;string&gt;:11(com_error)&lt;/string&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 &lt;string&gt;:2(__init__)&lt;/string&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 CLSIDToClass.py:18(&lt;module&gt;)&lt;/module&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 CLSIDToClass.py:48(HasClass)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.003    0.003    0.104    0.104 Services.py:1(&lt;module&gt;)&lt;/module&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 Services.py:8(Services)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 __init__.py:116(CDispatch)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 __init__.py:161(Constants)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 __init__.py:164(__init__)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.002    0.002 __init__.py:18(__WrapDispatch)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 __init__.py:190(EventsProxy)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 __init__.py:26(SetupEnvironment)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 __init__.py:417(DispatchBaseClass)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.035    0.035 __init__.py:46(GetObject)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 __init__.py:493(CoClassBaseClass)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.013    0.013    0.036    0.036 __init__.py:5(&lt;module&gt;)&lt;/module&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.035    0.035 __init__.py:83(Moniker)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.002    0.002    0.022    0.022 __init__.py:9(&lt;module&gt;)&lt;/module&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 build.py:102(__init__)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.003    0.003    0.003    0.003 build.py:11(&lt;module&gt;)&lt;/module&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 build.py:34(NotSupportedException)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 build.py:388(VTableItem)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 build.py:411(LazyDispatchItem)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 build.py:413(__init__)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 build.py:53(MapEntry)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 build.py:84(OleItem)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 build.py:87(__init__)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 build.py:99(DispatchItem)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 dynamic.py:110(Dispatch)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 dynamic.py:131(MakeOleRepr)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 dynamic.py:161(CDispatch)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 dynamic.py:162(__init__)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.009    0.009    0.012    0.012 dynamic.py:17(&lt;module&gt;)&lt;/module&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 dynamic.py:79(_GetGoodDispatch)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 dynamic.py:90(_GetGoodDispatchAndUserName)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 fnmatch.py:11(&lt;module&gt;)&lt;/module&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 gencache.py:165(GetClassForCLSID)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 gencache.py:204(GetModuleForCLSID)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.005    0.005    0.008    0.008 gencache.py:22(&lt;module&gt;)&lt;/module&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 gencache.py:53(__init__)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 gencache.py:73(_LoadDicts)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.001    0.001    0.002    0.002 glob.py:1(&lt;module&gt;)&lt;/module&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 keyword.py:11(&lt;module&gt;)&lt;/module&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        5    0.000    0.000    0.000    0.000 ntpath.py:116(splitdrive)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 ntpath.py:267(isdir)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 ntpath.py:439(normpath)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 ntpath.py:495(abspath)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        4    0.000    0.000    0.000    0.000 ntpath.py:51(isabs)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        3    0.000    0.000    0.000    0.000 ntpath.py:59(join)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.003    0.003    0.022    0.022 pythoncom.py:2(&lt;module&gt;)&lt;/module&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.003    0.003 pywintypes.py:2(&lt;module&gt;)&lt;/module&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.003    0.002    0.019    0.009 pywintypes.py:3(__import_pywin32_system_module__)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.004    0.002 re.py:186(compile)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.004    0.002 re.py:227(_compile)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 sre_compile.py:184(_compile_charset)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 sre_compile.py:213(_optimize_charset)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        6    0.000    0.000    0.000    0.000 sre_compile.py:24(_identityfunction)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 sre_compile.py:264(_mk_bitmap)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.001    0.000 sre_compile.py:367(_compile_info)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;      6/2    0.000    0.000    0.001    0.000 sre_compile.py:38(_compile)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        4    0.000    0.000    0.000    0.000 sre_compile.py:480(isstring)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.002    0.001 sre_compile.py:486(_code)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.004    0.002 sre_compile.py:501(compile)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        4    0.000    0.000    0.000    0.000 sre_parse.py:132(__len__)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;       36    0.000    0.000    0.000    0.000 sre_parse.py:136(__getitem__)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;       46    0.000    0.000    0.000    0.000 sre_parse.py:144(append)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;      6/2    0.000    0.000    0.000    0.000 sre_parse.py:146(getwidth)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 sre_parse.py:184(__init__)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;       58    0.000    0.000    0.001    0.000 sre_parse.py:188(__next)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;       12    0.000    0.000    0.000    0.000 sre_parse.py:201(match)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;       53    0.000    0.000    0.001    0.000 sre_parse.py:207(get)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;      3/2    0.000    0.000    0.002    0.001 sre_parse.py:307(_parse_sub)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;      5/2    0.000    0.000    0.002    0.001 sre_parse.py:385(_parse)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.002    0.001 sre_parse.py:669(parse)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 sre_parse.py:73(__init__)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 sre_parse.py:78(opengroup)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 sre_parse.py:89(closegroup)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        6    0.000    0.000    0.000    0.000 sre_parse.py:96(__init__)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 struct.py:35(_compile)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 struct.py:54(pack)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 struct.py:77(unpack)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 traceback.py:1(&lt;module&gt;)&lt;/module&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 winerror.py:4(&lt;module&gt;)&lt;/module&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 wmi.py:101(SelfDeprecatingDict)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 wmi.py:1143(_wmi_watcher)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 wmi.py:138(ProvideConstants)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 wmi.py:144(__init__)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        4    0.000    0.000    0.000    0.000 wmi.py:149(__getattr__)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 wmi.py:168(x_wmi)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 wmi.py:183(x_wmi_invalid_query)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 wmi.py:187(x_wmi_timed_out)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 wmi.py:191(x_wmi_no_namespace)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 wmi.py:197(x_access_denied)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 wmi.py:201(x_wmi_authentication)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 wmi.py:205(x_wmi_uninitialised_thread)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 wmi.py:324(_wmi_method)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 wmi.py:432(_wmi_property)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 wmi.py:450(_wmi_object)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.003    0.003 wmi.py:733(_wmi_event)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 wmi.py:756(_wmi_class)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.005    0.005    0.101    0.101 wmi.py:77(&lt;module&gt;)&lt;/module&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 wmi.py:870(_wmi_result)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 wmi.py:886(_wmi_namespace)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 wmi.py:91(signed_to_unsigned)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 {_sre.compile}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 {_win32sysloader.GetModuleFilename}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.001    0.001    0.001    0.001 {_win32sysloader.LoadModule}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 {built-in method load}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {cPickle.Unpickler}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 {dir}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.001    0.001    0.105    0.105 {execfile}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 {getattr}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 {globals}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        4    0.000    0.000    0.000    0.000 {hasattr}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 {imp.get_suffixes}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.015    0.007    0.015    0.007 {imp.load_dynamic}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {imp.new_module}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        7    0.000    0.000    0.000    0.000 {isinstance}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;  171/169    0.000    0.000    0.000    0.000 {len}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        3    0.000    0.000    0.000    0.000 {max}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        4    0.000    0.000    0.000    0.000 {method 'Bind' of 'PyITypeComp' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {method 'BindToObject' of 'PyIMoniker' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {method 'GetContainingTypeLib' of 'PyITypeInfo' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 {method 'GetTypeAttr' of 'PyITypeInfo' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {method 'GetTypeComp' of 'PyITypeInfo' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {method 'GetTypeComp' of 'PyITypeLib' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.001    0.001    0.001    0.001 {method 'GetTypeInfo' of 'PyIDispatch' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;      230    0.000    0.000    0.000    0.000 {method 'append' of 'list' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {method 'clear' of 'dict' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {method 'close' of 'file' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {method 'difference' of 'set' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        4    0.000    0.000    0.000    0.000 {method 'extend' of 'list' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 {method 'get' of 'dict' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 {method 'items' of 'dict' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {method 'join' of 'str' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {method 'lstrip' of 'str' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {method 'remove' of 'list' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {method 'replace' of 'str' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {method 'split' of 'str' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        7    0.000    0.000    0.000    0.000 {method 'startswith' of 'str' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        2    0.000    0.000    0.000    0.000 {method 'unpack' of 'Struct' objects}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;       15    0.000    0.000    0.000    0.000 {min}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {nt._getfullpathname}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {nt.stat}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {open}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;       46    0.000    0.000    0.000    0.000 {ord}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.033    0.033    0.033    0.033 {pythoncom.MkParseDisplayName}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {win32api.GetFullPathName}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {win32api.GetTempPath}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;        1    0.000    0.000    0.000    0.000 {win32api.RegOpenKey}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;So many function calls for a class! Wow!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;More information on the profiler &lt;a href="http://docs.python.org/library/profile.html"&gt;here&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-5592048677383710195?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2puJdbIHSinM_SH-4xmSKdtTLTo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2puJdbIHSinM_SH-4xmSKdtTLTo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2puJdbIHSinM_SH-4xmSKdtTLTo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2puJdbIHSinM_SH-4xmSKdtTLTo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/2BWi7vCgRw8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/5592048677383710195/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=5592048677383710195" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/5592048677383710195?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/5592048677383710195?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/2BWi7vCgRw8/python-profiler.html" title="Python: Profiler" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/04/python-profiler.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AMSH4_fyp7ImA9WxFRFUw.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-3958234506544986032</id><published>2010-04-27T21:42:00.000-07:00</published><updated>2010-04-28T22:43:09.047-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-28T22:43:09.047-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Python: Service Class</title><content type="html">&lt;div&gt;&lt;b&gt;Problem Statement:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Create a class for starting, stopping and getting status of a service.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Uses 2 methods:&lt;/div&gt;&lt;div&gt;- Windows Management Instrumentation&lt;/div&gt;&lt;div&gt;- SC Command from DOS&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Solution:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;import wmi&lt;/div&gt;&lt;div&gt;import os&lt;/div&gt;&lt;div&gt;import time&lt;/div&gt;&lt;div&gt;import string&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;class Services:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;""" &lt;/div&gt;&lt;div&gt;     1. The Service Class is aimed at starting and stopping the services based on the service name given as an input.&lt;/div&gt;&lt;div&gt;     2. Class is instantiated with Service Name with the help of argumented constructor called __init__().&lt;/div&gt;&lt;div&gt;     3. Function getstatus() gets the status of the services - Running or Stopped.&lt;/div&gt;&lt;div&gt;     4. Functions start(),stop() would start and stop the services respectively by first getting the status of the service. &lt;/div&gt;&lt;div&gt;     5. If the service is already started/stopped, it will print a message that the service is already running/stopped.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; 6. start() and stop() functions work in 2 modes: Using DOS command SC and using Windows Management Instrumentation. Default mode being "SC".&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;"""&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;def __init__(self, service):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;self.wmiObj = wmi.WMI()&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;self.service = service&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;def getstatus(self):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;return self.wmiObj.Win32_Service(Name=self.service)[0].State&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;def start(self, mode="sc"):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;if mode.upper() == "SC":&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;try:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;if(self.getstatus() == "Running"):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;raise Exception("%s service is already running " % self.service)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;else:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;command = 'sc.exe start ' + self.service &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;os.system(command)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;except Exception:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;raise&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;if mode.upper() == "WMI":&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;try:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;if self.getstatus()=="Running":&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;raise Exception("%s service is already running " % self.service)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;else: &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;self.wmiObj.Win32_Service(Name=self.service)[0].StartService()&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;except Exception:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;raise&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;def stop(self, mode="sc"):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;if mode.upper() == "SC":&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;try:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;if(self.getstatus() == "Stopped"):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;raise Exception("%s service is already stopped " % self.service)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;else:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;command = 'sc.exe stop ' + self.service &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;os.system(command)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;except Exception:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;raise&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;if mode.upper() == "WMI":&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;try:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;if self.getstatus()=="Stopped":&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;raise Exception("%s service is already stopped " % self.service)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;else: &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;self.wmiObj.Win32_Service(Name=self.service)[0].StopService()&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;except Exception:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;raise &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-3958234506544986032?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_vPRH-gLoUgdfW4vwjgOIXk1qTs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_vPRH-gLoUgdfW4vwjgOIXk1qTs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_vPRH-gLoUgdfW4vwjgOIXk1qTs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_vPRH-gLoUgdfW4vwjgOIXk1qTs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/SSod3dJqzKo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/3958234506544986032/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=3958234506544986032" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/3958234506544986032?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/3958234506544986032?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/SSod3dJqzKo/python-service-class.html" title="Python: Service Class" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/04/python-service-class.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUHQH45eSp7ImA9WxFRE0g.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-8125832933771094725</id><published>2010-04-27T01:31:00.000-07:00</published><updated>2010-04-27T01:33:51.021-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-27T01:33:51.021-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DOS" /><title>DOS: Creation of HardLink in Windows</title><content type="html">&lt;b&gt;Problem Statement:&lt;/b&gt;&lt;div&gt;Creation of hardink in Windows&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Solution:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;This could be achieved by running the following on DOS prompt:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;fsutil hardlink create c:\hlink.txt c:\log.log&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Output of this command is:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;Hardlink created for c:\hlink.txt &lt;&lt;===&gt;&gt; c:\log.log&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Thus hlink.txt file is now a hardlink file for log.log. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Any changes made in log.log would reflect in hlink.txt file and vice-versa.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Also if any one file is deleted the other can be used as all contents would still be present in the other file.&lt;/span&gt;&lt;/div&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-8125832933771094725?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/acGYk2LLphYHpcICbJLOtZqTCrs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/acGYk2LLphYHpcICbJLOtZqTCrs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/acGYk2LLphYHpcICbJLOtZqTCrs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/acGYk2LLphYHpcICbJLOtZqTCrs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/X6Q8Eh27WAc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/8125832933771094725/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=8125832933771094725" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/8125832933771094725?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/8125832933771094725?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/X6Q8Eh27WAc/dos-creation-of-hardlink-in-windows.html" title="DOS: Creation of HardLink in Windows" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/04/dos-creation-of-hardlink-in-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEER388fip7ImA9WxFRE0k.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-6628023457116169201</id><published>2010-04-26T21:19:00.000-07:00</published><updated>2010-04-26T21:30:06.176-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-26T21:30:06.176-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DOS" /><title>DOS: Createfile of user-defined size</title><content type="html">Hi Guys,&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's something on our own, tried, tested and approved DOS commands.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Recently I came across a dos command that can create files of sizes that user needs. I thought this was useful and can used for:&lt;/div&gt;&lt;div&gt;- Creation of files as a test data&lt;/div&gt;&lt;div&gt;- Automation purposes based on the requirements&lt;/div&gt;&lt;div&gt;- For loading/stressing hard disk&lt;/div&gt;&lt;div&gt;- Boundary Value testing (since files can be craeted with least count of 1 Byte)&lt;/div&gt;&lt;div&gt;&lt;i&gt;(Contributions by Sunil Ubranimath)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;DOS Command: &lt;/b&gt;&lt;/div&gt;&lt;div&gt;fsutil file createnew c:\test.txt 2000&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This creates a file test.txt on C:\ of 2000 Bytes. The data in the file is nothing but 'whitespaces'.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Other useful DOS commands:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;C:\Documents and Settings\Chetan&gt;fsutil&lt;/div&gt;&lt;div&gt;---- Commands Supported ----&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;behavior - Control file system behavior&lt;/div&gt;&lt;div&gt;dirty - Manage volume dirty bit&lt;/div&gt;&lt;div&gt;file - File specific commands&lt;/div&gt;&lt;div&gt;fsinfo - File system information&lt;/div&gt;&lt;div&gt;hardlink - Hardlink management&lt;/div&gt;&lt;div&gt;objectid - Object ID management&lt;/div&gt;&lt;div&gt;quota - Quota management&lt;/div&gt;&lt;div&gt;reparsepoint - Reparse point management&lt;/div&gt;&lt;div&gt;sparse - Sparse file control&lt;/div&gt;&lt;div&gt;usn - USN management&lt;/div&gt;&lt;div&gt;volume - Volume management&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-6628023457116169201?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KoIvc3pQSonoVter6GLPROrmlJk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KoIvc3pQSonoVter6GLPROrmlJk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KoIvc3pQSonoVter6GLPROrmlJk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KoIvc3pQSonoVter6GLPROrmlJk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/YUJYDGWO5uQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/6628023457116169201/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=6628023457116169201" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/6628023457116169201?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/6628023457116169201?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/YUJYDGWO5uQ/dos-createfile-of-user-defined-size.html" title="DOS: Createfile of user-defined size" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/04/dos-createfile-of-user-defined-size.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08BQnYycCp7ImA9WxFREkg.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-771956691913129363</id><published>2010-04-25T21:07:00.000-07:00</published><updated>2010-04-25T21:24:13.898-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-25T21:24:13.898-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Python: Command Design Pattern</title><content type="html">Hi Guys, &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Recently I was working on learning design patterns in python. If you are not reading them , I highly recommend you to do so...they definitely help you in creating better designs or frameworks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Here's something on Command Design Pattern:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;class CommandPattern:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;def __init__(self, cmd):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;self.cmd = cmd&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;self._dict = { 'add' : 'add()', 'sub' : 'sub()' }&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;if self._dict.has_key(cmd):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;call = self._dict[cmd]&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;call = "self." + call&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;eval(call)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;else:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;print "Invalid Command...."&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;def add(self):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;print "In Add"&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;def sub(self):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;print "In Sub"&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;cmdpattern = CommandPattern('add')&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Explaination:&lt;/b&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;Command design pattern is seen as an example of encapsulation. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As per wikipedia, &lt;i&gt;Three terms always associated with the command pattern are client,  invoker and receiver. The client instantiates the command  object and provides the information required to call the method at a later time.  The invoker decides when the method should be called. The receiver  is an instance of the class that contains the method's code.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the above example, based on the command that is passed to the construtor of the class, the corresposnding function of the class is called and executed.&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-771956691913129363?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mW162M9nDog1HrfPNPEfzUAh8yA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mW162M9nDog1HrfPNPEfzUAh8yA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mW162M9nDog1HrfPNPEfzUAh8yA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mW162M9nDog1HrfPNPEfzUAh8yA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/syehap8_hr4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/771956691913129363/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=771956691913129363" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/771956691913129363?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/771956691913129363?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/syehap8_hr4/python-command-design-pattern.html" title="Python: Command Design Pattern" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/04/python-command-design-pattern.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUMRH8-fSp7ImA9WxFREkg.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-5230805112470618969</id><published>2010-04-25T21:03:00.000-07:00</published><updated>2010-04-25T22:04:45.155-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-25T22:04:45.155-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Python: VirtualMachine Handler</title><content type="html">&lt;b&gt;Problem Statement:&lt;/b&gt;&lt;div&gt;Create a Virtual Machine Handler class that supports,&lt;/div&gt;&lt;div&gt;- Start()&lt;/div&gt;&lt;div&gt;- Stop()&lt;/div&gt;&lt;div&gt;- TakeSnapshot()&lt;/div&gt;&lt;div&gt;- RevertSnapshot()&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Solution:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;import os&lt;/div&gt;&lt;div&gt;import time&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;class VirtualMCHandler:&lt;/div&gt;&lt;div&gt;"""&lt;/div&gt;&lt;div&gt;VirtualMCHandler class helps in managing Virtual Machines.&lt;/div&gt;&lt;div&gt;It has 4 functions that perform various operations on a VM.&lt;/div&gt;&lt;div&gt;Constructor: Takes the path of the Virtual Machine as its argument.&lt;/div&gt;&lt;div&gt;start() - Starts the  Virtual Machine Image.&lt;/div&gt;&lt;div&gt;stop() - Stops the  Virtual Machine Image.&lt;/div&gt;&lt;div&gt;takesnapshot(snapshotname) - Takes the Snaphot of  Virtual Machine Image. Argument is the new snapshot name.&lt;/div&gt;&lt;div&gt;revertsnapshot(snapshotname) - Reverts the Virtual Machine Image to the previously taken snaphot name as mentioned in its argument.&lt;/div&gt;&lt;div&gt;"""&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;def __init__(self, VMPath):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;self.path = "\"" + VMPath + "\""&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;def start(self):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;_vmstart = "vmrun.exe -T ws start " + self.path + ""&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;os.system(_vmstart)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;def stop(self):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;_vmstop = "vmrun.exe -T ws stop " + self.path + ""&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;os.system(_vmstop)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;def takesnapshot(self,snapshotname):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;self.snapshotname = "\"" + snapshotname + "\""&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;_vmsnapshotname = "vmrun.exe -T ws snapshot " + self.path + " " + self.snapshotname&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;os.system(_vmsnapshotname)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;def revertsnapshot(self,snapshotname):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;self.snapshotname = "\"" + snapshotname + "\""&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;_vmrevert = "vmrun.exe -T ws revertToSnapshot " + self.path + " " + self.snapshotname&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;os.system(_vmrevert)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;vm = VirtualMCHandler("E:\\Windows Server 2003 Enterprise Edition.vmx")&lt;/div&gt;&lt;div&gt;vm.start()&lt;/div&gt;&lt;div&gt;vm.takesnapshot("ARG")&lt;/div&gt;&lt;div&gt;vm.revertsnapshot("ARG")&lt;/div&gt;&lt;div&gt;vm.stop()&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Note: &lt;/b&gt;You should have vmrun.exe in the path from where the script is run.&lt;/div&gt;&lt;div&gt;The script is tested for VMWare Workstation. &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-5230805112470618969?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/A_wP6p99TBkbWQUO0pJAIay5-GI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A_wP6p99TBkbWQUO0pJAIay5-GI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/A_wP6p99TBkbWQUO0pJAIay5-GI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A_wP6p99TBkbWQUO0pJAIay5-GI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/lEKXyOtUYX0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/5230805112470618969/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=5230805112470618969" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/5230805112470618969?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/5230805112470618969?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/lEKXyOtUYX0/python-virtualmachine-handler.html" title="Python: VirtualMachine Handler" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/04/python-virtualmachine-handler.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8ERnY6cCp7ImA9WxFbF0g.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-5212168361446323137</id><published>2010-04-25T20:53:00.001-07:00</published><updated>2010-07-10T03:30:07.818-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-10T03:30:07.818-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SendKeys" /><category scheme="http://www.blogger.com/atom/ns#" term="SendKeys Module" /><category scheme="http://www.blogger.com/atom/ns#" term="SendKeys in Python" /><category scheme="http://www.blogger.com/atom/ns#" term="UI Automation" /><category scheme="http://www.blogger.com/atom/ns#" term="Python SendKeys" /><category scheme="http://www.blogger.com/atom/ns#" term="Chetan Giridhar" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="Python Modules" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Python: SendKeys</title><content type="html">&lt;b&gt;Problem Statement:&lt;/b&gt; &lt;div&gt;Last week I faced an interesting problem t work. I was using runas DOS command using a Python script. After running the command, it asks you to enter a password on the cmd prompt. Now how do I do it with Python? Obvious answer was using subprocess functions (Popen and communicate). But have you tried something unconvenctional?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Solution:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;SendKeys module could be the answer. Lets see how!&lt;/div&gt;&lt;div&gt;SendKeys is not available in Python 2.5 with default installation. One has to use that module by installing it. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Binary for the same could be obatainable from:&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.rutherfurd.net/python/sendkeys/"&gt;http://www.rutherfurd.net/python/sendkeys/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Here's the code that worked for me:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;import SendKeys&lt;/div&gt;&lt;div&gt;import subprocess&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;password = "PASSWORD"&lt;/div&gt;&lt;div&gt;command = "runas /user:USERNAME Notepad.exe"&lt;/div&gt;&lt;div&gt;subprocess.Popen(command)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;send = """&lt;/div&gt;&lt;div&gt;%s{ENTER}&lt;/div&gt;&lt;div&gt;""" % (password)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;SendKeys.SendKeys(send)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For more better examples you could refer to: &lt;/div&gt;&lt;div&gt;&lt;a href="http://www.rutherfurd.net/python/sendkeys/"&gt;http://www.rutherfurd.net/python/sendkeys/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-5212168361446323137?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UTO3RdHn2BoVqeJgk7BzTjtkKks/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UTO3RdHn2BoVqeJgk7BzTjtkKks/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UTO3RdHn2BoVqeJgk7BzTjtkKks/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UTO3RdHn2BoVqeJgk7BzTjtkKks/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/xdD93xIr-kk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/5212168361446323137/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=5212168361446323137" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/5212168361446323137?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/5212168361446323137?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/xdD93xIr-kk/python-sendkeys.html" title="Python: SendKeys" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/04/python-sendkeys.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMDSHkycCp7ImA9WxFREkg.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-1093347729376630815</id><published>2010-04-25T20:49:00.000-07:00</published><updated>2010-04-25T21:01:19.798-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-25T21:01:19.798-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Python: MD5/SHA Signature Class</title><content type="html">&lt;div&gt;&lt;b&gt;Problem Statement:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Get a class to use it for calculatin signatures of file.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;Solution Code:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;class Hashes:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;''' &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Helps in retruning the foloowing signatures of a file:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;md5()&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;sha1()&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;sha256()&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;sha512()&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;'''&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;def __init__(self, filepath):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;self._filepath = filepath&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;def md5(self):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;import md5&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;try:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;fileobj = file(self._filepath, 'rb')&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;except Exception,msg:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;raise&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;return md5.new(fileobj.read()).hexdigest()&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;def sha1(self):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;import sha&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;try:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;fileobj = file(self._filepath, 'rb')&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;except Exception,msg:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;raise&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;return sha.new(fileobj.read()).hexdigest()&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;def sha512(self):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;import hashlib&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;try:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;fileobj = file(self._filepath, 'rb')&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;except Exception,msg:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;raise&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;(hashlib.sha512()).update(fileobj.read())&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;return (hashlib.sha512()).hexdigest()&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;def sha256(self):&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;import hashlib&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;try:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;fileobj = file(self._filepath, 'rb')&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;except Exception,msg:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;raise&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;(hashlib.sha256()).update(fileobj.read())&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;return (hashlib.sha256()).hexdigest()&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;hash = Hashes("C:\\Windows\\system32\\notepad.exe")&lt;/div&gt;&lt;div&gt;hash.sha1()&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-1093347729376630815?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ji-qXNDFts9MLHEj6JoBM8TDlCA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ji-qXNDFts9MLHEj6JoBM8TDlCA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ji-qXNDFts9MLHEj6JoBM8TDlCA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ji-qXNDFts9MLHEj6JoBM8TDlCA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/gZlkpdyPuuQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/1093347729376630815/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=1093347729376630815" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/1093347729376630815?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/1093347729376630815?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/gZlkpdyPuuQ/python-md5sha-signature-class.html" title="Python: MD5/SHA Signature Class" /><author><name>Chetan Giridhar</name><uri>http://www.blogger.com/profile/05519795135167211444</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="28" height="32" src="http://1.bp.blogspot.com/_FEJOgPeEtSI/TB9r8t9RiUI/AAAAAAAAFHE/McuUpbAzAH8/S220/13052009526.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/04/python-md5sha-signature-class.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IGQ3c9fCp7ImA9WxFSGUw.&quot;"><id>tag:blogger.com,1999:blog-5370477996508590341.post-4011405963387086797</id><published>2010-04-12T02:09:00.000-07:00</published><updated>2010-04-21T22:52:02.964-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-21T22:52:02.964-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Python: Load DLL</title><content type="html">Hi guys,&lt;div&gt;Posting after a long time...but life had been busy and marriage really takes a toll on you. he he...jokes apart...&lt;/div&gt;&lt;div&gt;Meanwhile I have concentrated my energies on Python language. looks cool! Something in between Perl and C++ as I would like to put it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's a small code that can show you the power of python:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Problem Statement: &lt;/b&gt;&lt;/div&gt;&lt;div&gt;What if you get a DLL file and you want to quickly test some of the exported APIs? Any ideas?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Solution:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Python provides you one.&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Code snippet:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;from ctypes import *&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;libc = windll.LoadLibrary('C:\\Windows\\System32\\kernel32.dll') #loads library&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;x = libc.GetModuleHandleA(None) #get the return type of GetModuleHandleA API&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;del libc #closes libc handler&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;In this code: we load kernel32.dll file and pass None argument to GetModuleHandleA function of the Dll.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Similarly you could customize this small code for your use.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Simple and quick!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Enjoy! Please do comment!&lt;/span&gt;&lt;/div&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5370477996508590341-4011405963387086797?l=tediousscripts.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yYIp7XmIC9x2h2jISWG3jCNxQDI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yYIp7XmIC9x2h2jISWG3jCNxQDI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yYIp7XmIC9x2h2jISWG3jCNxQDI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yYIp7XmIC9x2h2jISWG3jCNxQDI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/InterestingScripts/~4/anTz9iCgohk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tediousscripts.blogspot.com/feeds/4011405963387086797/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5370477996508590341&amp;postID=4011405963387086797" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/4011405963387086797?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5370477996508590341/posts/default/4011405963387086797?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InterestingScripts/~3/anTz9iCgohk/python-load-dll.html" title="Python: Load DLL" /><author><name>Script Master</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="27" src="http://4.bp.blogspot.com/_XFOcEwMsK0s/SV9wzwV71KI/AAAAAAAAAAM/L9gDvjz2G74/S220/leo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tediousscripts.blogspot.com/2010/04/python-load-dll.html</feedburner:origLink></entry></feed>

