Given a filename, tell whether it's executable. The trouble is that "executable" is not a simple concept. Roughly, files fall into three categories.
The FindExecutable API call is the easiest way to distinguish these. It returns a string indicating what would be run if you were to have double-clicked on the file. If that is the same as the filename you first thought of, it's an executable. If it returns something else, it's a document. If it raises an error, it's neither.
NB The filename returned is a short filename, so you need to convert it before comparing to the original.
import sys
import pywintypes
import win32api
filename = sys.executable.lower ()
try:
print "Looking at", filename
r, executable = win32api.FindExecutable (filename)
executable = win32api.GetLongPathName (executable).lower ()
except pywintypes.error:
print "Neither executable nor document"
else:
if executable == filename:
print "executable"
else:
print "document"