[Python-Dev] automatic wildcard expansion on Win32

Tim Peters tim_one at email.msn.com
Sat Jun 19 03:00:46 CEST 1999


[David Ascher]
> A python-help poster finally convinced me that there was a way to enable
> automatic wildcard expansion on win32.  This is done by linking in
> "setargv.obj" along with all of the other MS libs.  Quick testing shows
> that it works.
>
> Is this a feature we want to add?  I can see both sides of that coin.

The only real drawback I see is that we're then under some obligation to
document Python's behavior.  Which is then inherited from the MS
setargv.obj, which is in turn only partially documented in developer-only
docs, and incorrectly documented at that.

> PS: I saw a RISKS digest posting last week which had a horror story about
> wildcard expansion on some flavor of Windows.  The person had two files
> with long filenames:
>
>     verylongfile1.txt
>  and
>     verylongfile2.txt
>
> But Win32 stored them in 8.3 format, so they were stored as
>     verylo~2.txt
>  and
>     verylo~1.txt
>
> (Yes, the 1 and 2 were swapped!).  So when he did
>
>  del *1.txt
>
> he removed the wrong file.  Neat, eh?
>
> (This is actually relevant -- it's possible that setargv.obj and
> glob.glob could give different answers).

Yes, and e.g. it works this way under Win95:

D:\Python>dir *~*

 Volume in drive D is DISK1PART2
 Volume Serial Number is 1DFF-0F59
 Directory of D:\Python

PYCLBR~1 PAT         5,765  06-07-99 11:41p pyclbr.patch
KJBUCK~1 PYD        34,304  03-31-98  3:07a kjbuckets.pyd
WIN32C~1       <DIR>        05-16-99 12:10a win32comext
PYTHON~1       <DIR>        05-16-99 12:10a Pythonwin
TEXTTO~1       <DIR>        01-15-99 11:35p TextTools
UNWISE~1 EXE       109,056  07-03-97  8:35a UnWisePW32.exe
         3 file(s)        149,125 bytes
         3 dir(s)   1,502,511,104 bytes free

Here's the same thing in an argv-spewing console app whipped up to link
setargv.obj:

D:\Python>garp\debug\garp *~*
0: D:\PYTHON\GARP\DEBUG\GARP.EXE
1: kjbuckets.pyd
2: pyclbr.patch
3: Pythonwin
4: TextTools
5: UnWisePW32.exe
6: win32comext

D:\Python>

setargv.obj is apparently consistent with what native wildcard expansion
does (although you won't find that promise made anywhere!), and it's
definitely surprising in the presence of non-8.3 names.  The quoting rules
too are impossible to explain, seemingly random:

D:\Python>garp\debug\garp "\\a\\"
0: D:\PYTHON\GARP\DEBUG\GARP.EXE
1: \\a\

D:\Python>

Before I was on the Help list, I used to believe it would work to just say
"well, it does what Windows does" <wink>.

magnification-of-ignorance-ly y'rs  - tim






More information about the Python-Dev mailing list