File extension

Steve Holden steve at holdenweb.com
Sat Mar 17 06:29:43 EDT 2007


Anil Kumar wrote:
> Hi,
>  
> Can Python Script can have different extensions like .sh etc.... Or Is 
> .py is mandatory to be present as the extension for the Python Script.
>  
The interpreter itself doesn't really care. The issues you are hotting 
are due to operating system. and command shell differences.

> We have an application where the script was initially written in shell 
> script with extension .sh. Now we are migrating this script to be run in 
> both Unix and Windows, so using Python for migration.
>  
Good for you!

> I have created a new Python Script porting all the changes in shell 
> script and it is working fine in Unix/Linux operating system. Later I 
> changed the extension of the file from .py to .sh, even then it worked.
>  
The Unix command interpretation mechanism uses PATH as a list of 
directories to search for the named command file (the first word of the 
expanded command line). It then looks for the magic string "#!" at the 
start of the executable file and, if it finds that string, it passes the 
file to the interpreter named in the rest of the line for execution as a 
program.

Your Python files probably begin with something like

#!/usr/bin/python

or

#!/usr/bin/env python

> But when I try a python script with extension .sh in windows, the file 
> is not getting recognized by the Python interpreter. Is this supported? 
> Or is there any way we can achieve the same?
>  
In Windows, alas, the mechanism is less versatile. The command 
interpreter uses an environment variable called PATHEXT to decide which 
extensions to check when it sees a command that it can't find directly. 
For example, my PATHEXT variable is currently

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

(you'll observe I have given up on the PATHEXT mechanism - it's too much 
of a pain in the butt for me, so I just code explicit calls to the 
python interpreter).

It looks on the PATH for a file with the given name and each extension, 
and when it finds one it then runs the interpreter registered for that 
type of file.

> The reason I am trying to change the extension is, it reduces lot of 
> porting changes. No need to go to each of our file which were 
> referencing .sh file before and change it to .py.
>  
> Any Help would be greatly Appreciated.
>  
You could cheat ... if you register the .SH extension as "to be handled 
by the python interpreter" and then add .SH to PATHEXT this should work 
under Windows.

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC/Ltd          http://www.holdenweb.com
Skype: holdenweb     http://del.icio.us/steve.holden
Blog of Note:          http://holdenweb.blogspot.com
See you at PyCon?         http://us.pycon.org/TX2007



More information about the Python-list mailing list