Detect Linux Runlevel

Marko Rauhamaa marko at pacujo.net
Thu Dec 8 13:07:16 EST 2016


Tim Chase <python.list at tim.thechases.com>:

> Interesting.  I read up on os.open() and os.read() 
> https://docs.python.org/2/library/os.html#os.read
> but didn't notice anything there clarifying that it was unbuffered
> compared to the __builtins__.open() and fp.read() functions.
>
> Could you point me to resources where I can learn more about the
> distinctions?

It is not explained very clearly in the documentation, but the os.*
functions are thin wrappers around the analogous C functions (system
calls or standard library functions).

There is just this allusion:

   Note that using the file descriptor directly will bypass the file
   object methods, ignoring aspects such as internal buffering of data.

   <URL: https://docs.python.org/3/library/os.html?#file-descriptor-op
   erations>

The os.* facilities are ultimately documented in the Linux man pages.


File object buffering can be turned off by adding buffering=0 to the
high-level open() builtin function:

   When no buffering argument is given, the default buffering policy
   works as follows:

    * Binary files are buffered in fixed-size chunks; the size of the
      buffer is chosen using a heuristic trying to determine the
      underlying device’s “block size” and falling back on
      io.DEFAULT_BUFFER_SIZE. On many systems, the buffer will typically
      be 4096 or 8192 bytes long.

   <URL: https://docs.python.org/3/library/functions.html#open>


In general, system programming is best done using system programming
facilities, ie, os.*.


Marko


More information about the Python-list mailing list