Return to Snippet

Revision: 58568
at July 22, 2012 07:44 by pckujawa


Initial Code
:: @echo off
:: This file can be called from anywhere, so we need to give the full path to the shovel file (which is in the same directory as this script)
@setlocal
@set directory=%~dp0
@python %directory%shovel %*
:: Turns out the above works, so no need to inline the contents of 'shovel' as done below. Note, the shovel python file needs to be in a subdirectory called 'shovel'
:: python -c "__requires__ = 'shovel==0.1.9'; import pkg_resources; pkg_resources.run_script('shovel==0.1.9', 'shovel')" %*

Initial URL


Initial Description
I had hear about a method to run a method like an executable, with the arguments being passed in from the commandline. Apparently, Ruby has this with the Rake project. Well, Python has it with [Shovel](http://devblog.seomoz.org/2012/03/shovel-rake-for-python). Only the instructions didn't work for me on windows, so I had to create a batch script to call `shovel` correctly.

So here's my setup. I installed shovel using `easy_install shovel`, which placed it in my python scripts folder (C:\Python27\Scripts, which is in my PATH). I created 'shovel.bat' (see source) in the same folder. So now I can call `shovel` from anywhere and it will call my batch file, passing the parameters into shovel.

For completeness, here is my working directory structure (note the subfolder called shovel):

	D:.
	│   song log.log
	│   Untitled_10.mp3
	│   Untitled_11.mp3
	│   Untitled_2.mp3
	│   Untitled_3.mp3
	│   Untitled_4.mp3
	│   Untitled_5.mp3
	│   Untitled_6.mp3
	│   Untitled_7.mp3
	│   Untitled_8.mp3
	│   Untitled_9.mp3
	│
	└───shovel
	        tasks.py

My python script is incomplete but can be run by shovel using `shovel tasks.extractSongInfo "log file name.log"` from the directory above the 'shovel' directory. Here's the script:


	from shovel import task
	
	@task
	def extractSongInfo(logFile):
	    """Given a log file with lines like
	"{date}	INFO	 Currently playing - Song: {songName} - Artist: {artist} - Length: {numSeconds}"
	return a collection of extracted info."""
	    opId = "Extracting song info" # operation ID
	    print opId
	    print 'Done: ' + opId

Initial Title
Getting shovel to work in windows so python methods can be run like individual executables

Initial Tags
python, windows

Initial Language
Python