<p dir="ltr"><br>
On Nov 15, 2012 1:40 AM, "Ben Hoyt" <<a href="mailto:benhoyt@gmail.com">benhoyt</a><a href="mailto:benhoyt@gmail.com">@</a><a href="mailto:benhoyt@gmail.com">gmail.com</a>> wrote:<br>
><br>
> > That's one way of looking at it. The problem is that you tell if a<br>
> > value has been filled or not by having a None value.  But st_mode is<br>
> > itself multi-valued, and you don't always get all available<br>
> > value. Maybe d_type should be it's own attribute? If readdir returns<br>
> > it, we use it as is. If not, then the caller either does the None/stat<br>
> > dance or we make it a property that gets filled from the stat<br>
> > structure.<br>
><br>
> I'm inclined to KISS and just let the caller handle it. Many other<br>
> things in the "os" module are system dependent, including os.stat(),<br>
> so if the stat_results results returned by iterdir_stat() are system<br>
> dependent, that's just par for the course. I'm thinking of a docstring<br>
> something like:<br>
><br>
> """Yield tuples of (filename, stat_result) for each filename in<br>
> directory given by "path". Like listdir(), '.' and '..' are skipped.<br>
> The values are yielded in system-dependent order.<br>
><br>
> Each stat_result is an object like you'd get by calling os.stat() on<br>
> that file, but not all information is present on all systems, and st_*<br>
> fields that are not available will be None.<br>
><br>
> In practice, stat_result is a full os.stat() on Windows, but only the<br>
> "is type" bits of the st_mode field are available on Linux/OS X/BSD.<br>
> """</p>
<p dir="ltr">There's a code smell here, in that the doc for Unix variants is incomplete and wrong. Whether or not you get the d_type values depends on the OS having that extension. Further, there's a d_type value (DT_UNKNOWN) that isn't a valid value for the S_IFMT bits in st_mode (at least on BSD).</p>

<p dir="ltr">> So in real life, if you're using more than stat.S_ISDIR() of st_mode,<br>
> you'll need to call stat separately. But 1) it's quite rare to need eg<br>
> the permissions bits in this context, and 2) if you're expecting<br>
> st_mode to have that extra stuff your code's already system-dependent,<br>
> as permission bits don't mean much on Windows.<br>
><br>
> But the main point is that what the OS gives you for free is easily available.</p>
<p dir="ltr">If the goal is to make os.walk fast, then it might be better (on Posix systems, anyway) to see if it can be built on top of ftw instead of low-level directory scanning routines.</p>
<p dir="ltr">    <mike</p>