PyBat: A Python Module to Replace Batch File Usage (or, “Batch Files Aren’t Dead, They Just Deserve to Die”)

March 10th, 2008

Download PyBat 0.1.1

UPDATE: Hi, Reddit! I just wanted to clear this up: PyBat is about solving a somewhat specific problem: allowing Python scripts and batch files to communicate environment variable changes. This is in the case where you have a ton of legacy batch files that you cannot (for whatever reason) outright replace (which may or may not be the best thing to do in your case). I understand that everyone has their favorite scripting language (and for nontrivial tasks, they all sound better than batch files), but this is for situations where you want new Python scripts to work with the old stuff. The rest of the article is simply my rant that using batch files for nontrivial tasks is like working on a fusion reactor with a stone ax. Thanks for reading! Check out the rest of the site!

I’ve seen build systems that have accumulated the cruft of undocumented, half-forgotten, it-was-written-by-a-guy-who-no-longer-works-here software that was added piecemeal over time. It wasn’t until I had to do maintenance work on it that I discovered the horrifying truth of batch files.

Batch files are great for small tasks. But no bit of software remains small for very long, and after a while it balloons into an almost but not quite unbearable size. Batch files rely on goto logic. Batch files use environment variables (which is essentially a single namespace of global variables). Batch files have no consistent syntax. Batch files require several twists and hoops for basic programming tasks, if they can do them at all. Batch files rely on obscure command line switches (I can never remember if copy’s /Y suppresses the confirmation prompt and /-Y enforces the confirmation prompt, or the other way around.)

(UPDATE: I know you can use “call” to jump to a label in the batch file, though I rarely see it in use. The parameters use the %1 %2 etc. convention, instead of more descriptive labels. And you can always /? a command, but only because command line switches are also not very descriptive, and the long versions fill up the command line and make an unreadable mess.)

I tried googling for a batch file debugger, but only found pages that give handy “techniques” like printf-style debugging. Yech.

Of course I then realized the reason no one would make such a useless, baroque thing is because we have real scripting languages with real debuggers. Although throwing out all these batch files and rewriting them in Python (or even Perl) is tempting, it’s something you should never do.

No problem. Let’s just make all our new code in Python, and leave the unaesthetic but still usable old batch files around.

But you can’t. Because of environment variables. Many of the batch files I’ve seen do nothing but configure settings by changing environment variables (Visual Studio’s vcvars32.bat is an example of this). But any changes made to a child process’s environment will not be seen by the parent process. Batch files calling other batch files get around this with the “call” command. But batch files calling Python scripts (or vice versa) will not be able to see any changes made by the called file.

It’s not a flaw at all, it’s a basic, well-designed operating system principle. But it does make adding Python scripts that are backwards compatible with a batch file system impossible.

So I wrote a script to get around this impossibility. PyBat is a Python module that lets a Python script call a batch file (or vice versa), and will see the changes made by the called file. Because batch files can share environment variables with each other (with the call command), and Python scripts can share environment variables with each other (with the execfile() function), I’ve written pybat.py and pybat.bat that can bridge the two worlds by writing to a commonly known file. (A hack approach, but also the simplest that works.) (more…)

Stealth Windows updates without user permission or notification.

September 29th, 2007

(This is a somewhat old story.) I left a comment on Bruce Schneier’s cryptogram blog on his article about how Microsoft Windows Update was found to be updating even in the event where the user had turned off automatic updates. The article is located here.

Adrian Kingsley-Hughes reported the secret updates on ZDNet. Nate Clinton, PM for Windows Update, responds on his blog.

My comment on Bruce Schneier’s blog is below: (more…)

DiscEx: Discover, Explore - Virtual tour web software

January 7th, 2007

This is an applet I did in my junior year at UT for my software engineering course. It’s implemented as a Java applet, and looking back that was precisely the wrong technology to use. I plan on doing an updated, web-based Javascript version soon. In the meantime, here it is.

The virtual tour site is of the Umlauf Sculpture Garden in Austin, TX. We took several hundred photos of the garden (which came to about a gigabyte of images), but had to size them down for bandwidth considerations. The originals were lost in a disk crash.

Ideally, I’d like to recreate this software to be easy to use and allow people to visit other places in a more natural manner. I’m still working out the feature list and applications of this software.
DiscEx: Discover, Explore

Al’s Alerts

December 31st, 2006

Al’s Alerts, a web application (http://alsalerts.com).

Al’s Alerts is a service that will email you posts from Craig’s List whenever a post appears with the keywords you provide. This frees you from having to check Craig’s List every day if you are on the lookout for something specific. This is an improvement on Craig’s List’s subscriptions, which will simply send you every post in the category.

The site is operable, but I’d like to do a front-end rewrite using the Python web application framework Django. The back-end also needs to be rewritten to scale better. The user interface needs to be improved and streamlined, and I also need to include the additional cities that Craig’s List now serves.

This is currently a work in progress.

Powered by WordPress