• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1:mod:`os` --- Miscellaneous operating system interfaces
2=======================================================
3
4.. module:: os
5   :synopsis: Miscellaneous operating system interfaces.
6
7**Source code:** :source:`Lib/os.py`
8
9--------------
10
11This module provides a portable way of using operating system dependent
12functionality.  If you just want to read or write a file see :func:`open`, if
13you want to manipulate paths, see the :mod:`os.path` module, and if you want to
14read all the lines in all the files on the command line see the :mod:`fileinput`
15module.  For creating temporary files and directories see the :mod:`tempfile`
16module, and for high-level file and directory handling see the :mod:`shutil`
17module.
18
19Notes on the availability of these functions:
20
21* The design of all built-in operating system dependent modules of Python is
22  such that as long as the same functionality is available, it uses the same
23  interface; for example, the function ``os.stat(path)`` returns stat
24  information about *path* in the same format (which happens to have originated
25  with the POSIX interface).
26
27* Extensions peculiar to a particular operating system are also available
28  through the :mod:`os` module, but using them is of course a threat to
29  portability.
30
31* All functions accepting path or file names accept both bytes and string
32  objects, and result in an object of the same type, if a path or file name is
33  returned.
34
35* On VxWorks, os.popen, os.fork, os.execv and os.spawn*p* are not supported.
36
37.. note::
38
39   All functions in this module raise :exc:`OSError` (or subclasses thereof) in
40   the case of invalid or inaccessible file names and paths, or other arguments
41   that have the correct type, but are not accepted by the operating system.
42
43.. exception:: error
44
45   An alias for the built-in :exc:`OSError` exception.
46
47
48.. data:: name
49
50   The name of the operating system dependent module imported.  The following
51   names have currently been registered: ``'posix'``, ``'nt'``,
52   ``'java'``.
53
54   .. seealso::
55      :attr:`sys.platform` has a finer granularity.  :func:`os.uname` gives
56      system-dependent version information.
57
58      The :mod:`platform` module provides detailed checks for the
59      system's identity.
60
61
62.. _os-filenames:
63.. _filesystem-encoding:
64
65File Names, Command Line Arguments, and Environment Variables
66-------------------------------------------------------------
67
68In Python, file names, command line arguments, and environment variables are
69represented using the string type. On some systems, decoding these strings to
70and from bytes is necessary before passing them to the operating system. Python
71uses the :term:`filesystem encoding and error handler` to perform this
72conversion (see :func:`sys.getfilesystemencoding`).
73
74The :term:`filesystem encoding and error handler` are configured at Python
75startup by the :c:func:`PyConfig_Read` function: see
76:c:member:`~PyConfig.filesystem_encoding` and
77:c:member:`~PyConfig.filesystem_errors` members of :c:type:`PyConfig`.
78
79.. versionchanged:: 3.1
80   On some systems, conversion using the file system encoding may fail. In this
81   case, Python uses the :ref:`surrogateescape encoding error handler
82   <surrogateescape>`, which means that undecodable bytes are replaced by a
83   Unicode character U+DCxx on decoding, and these are again translated to the
84   original byte on encoding.
85
86
87The :term:`file system encoding <filesystem encoding and error handler>` must
88guarantee to successfully decode all bytes below 128. If the file system
89encoding fails to provide this guarantee, API functions can raise
90:exc:`UnicodeError`.
91
92See also the :term:`locale encoding`.
93
94
95.. _utf8-mode:
96
97Python UTF-8 Mode
98-----------------
99
100.. versionadded:: 3.7
101   See :pep:`540` for more details.
102
103The Python UTF-8 Mode ignores the :term:`locale encoding` and forces the usage
104of the UTF-8 encoding:
105
106* Use UTF-8 as the :term:`filesystem encoding <filesystem encoding and error
107  handler>`.
108* :func:`sys.getfilesystemencoding()` returns ``'UTF-8'``.
109* :func:`locale.getpreferredencoding()` returns ``'UTF-8'`` (the *do_setlocale*
110  argument has no effect).
111* :data:`sys.stdin`, :data:`sys.stdout`, and :data:`sys.stderr` all use
112  UTF-8 as their text encoding, with the ``surrogateescape``
113  :ref:`error handler <error-handlers>` being enabled for :data:`sys.stdin`
114  and :data:`sys.stdout` (:data:`sys.stderr` continues to use
115  ``backslashreplace`` as it does in the default locale-aware mode)
116* On Unix, :func:`os.device_encoding` returns ``'UTF-8'``. rather than the
117  device encoding.
118
119Note that the standard stream settings in UTF-8 mode can be overridden by
120:envvar:`PYTHONIOENCODING` (just as they can be in the default locale-aware
121mode).
122
123As a consequence of the changes in those lower level APIs, other higher
124level APIs also exhibit different default behaviours:
125
126* Command line arguments, environment variables and filenames are decoded
127  to text using the UTF-8 encoding.
128* :func:`os.fsdecode()` and :func:`os.fsencode()` use the UTF-8 encoding.
129* :func:`open()`, :func:`io.open()`, and :func:`codecs.open()` use the UTF-8
130  encoding by default. However, they still use the strict error handler by
131  default so that attempting to open a binary file in text mode is likely
132  to raise an exception rather than producing nonsense data.
133
134The :ref:`Python UTF-8 Mode <utf8-mode>` is enabled if the LC_CTYPE locale is
135``C`` or ``POSIX`` at Python startup (see the :c:func:`PyConfig_Read`
136function).
137
138It can be enabled or disabled using the :option:`-X utf8 <-X>` command line
139option and the :envvar:`PYTHONUTF8` environment variable.
140
141If the :envvar:`PYTHONUTF8` environment variable is not set at all, then the
142interpreter defaults to using the current locale settings, *unless* the current
143locale is identified as a legacy ASCII-based locale (as described for
144:envvar:`PYTHONCOERCECLOCALE`), and locale coercion is either disabled or
145fails. In such legacy locales, the interpreter will default to enabling UTF-8
146mode unless explicitly instructed not to do so.
147
148The Python UTF-8 Mode can only be enabled at the Python startup. Its value
149can be read from :data:`sys.flags.utf8_mode <sys.flags>`.
150
151See also the :ref:`UTF-8 mode on Windows <win-utf8-mode>`
152and the :term:`filesystem encoding and error handler`.
153
154
155.. _os-procinfo:
156
157Process Parameters
158------------------
159
160These functions and data items provide information and operate on the current
161process and user.
162
163
164.. function:: ctermid()
165
166   Return the filename corresponding to the controlling terminal of the process.
167
168   .. availability:: Unix.
169
170
171.. data:: environ
172
173   A :term:`mapping` object where keys and values are strings that represent
174   the process environment.  For example, ``environ['HOME']`` is the pathname
175   of your home directory (on some platforms), and is equivalent to
176   ``getenv("HOME")`` in C.
177
178   This mapping is captured the first time the :mod:`os` module is imported,
179   typically during Python startup as part of processing :file:`site.py`.  Changes
180   to the environment made after this time are not reflected in ``os.environ``,
181   except for changes made by modifying ``os.environ`` directly.
182
183   This mapping may be used to modify the environment as well as query the
184   environment.  :func:`putenv` will be called automatically when the mapping
185   is modified.
186
187   On Unix, keys and values use :func:`sys.getfilesystemencoding` and
188   ``'surrogateescape'`` error handler. Use :data:`environb` if you would like
189   to use a different encoding.
190
191   .. note::
192
193      Calling :func:`putenv` directly does not change ``os.environ``, so it's better
194      to modify ``os.environ``.
195
196   .. note::
197
198      On some platforms, including FreeBSD and macOS, setting ``environ`` may
199      cause memory leaks.  Refer to the system documentation for
200      :c:func:`putenv`.
201
202   You can delete items in this mapping to unset environment variables.
203   :func:`unsetenv` will be called automatically when an item is deleted from
204   ``os.environ``, and when one of the :meth:`pop` or :meth:`clear` methods is
205   called.
206
207   .. versionchanged:: 3.9
208      Updated to support :pep:`584`'s merge (``|``) and update (``|=``) operators.
209
210
211.. data:: environb
212
213   Bytes version of :data:`environ`: a :term:`mapping` object where both keys
214   and values are :class:`bytes` objects representing the process environment.
215   :data:`environ` and :data:`environb` are synchronized (modifying
216   :data:`environb` updates :data:`environ`, and vice versa).
217
218   :data:`environb` is only available if :data:`supports_bytes_environ` is
219   ``True``.
220
221   .. versionadded:: 3.2
222
223   .. versionchanged:: 3.9
224      Updated to support :pep:`584`'s merge (``|``) and update (``|=``) operators.
225
226
227.. function:: chdir(path)
228              fchdir(fd)
229              getcwd()
230   :noindex:
231
232   These functions are described in :ref:`os-file-dir`.
233
234
235.. function:: fsencode(filename)
236
237   Encode :term:`path-like <path-like object>` *filename* to the
238   :term:`filesystem encoding and error handler`; return :class:`bytes`
239   unchanged.
240
241   :func:`fsdecode` is the reverse function.
242
243   .. versionadded:: 3.2
244
245   .. versionchanged:: 3.6
246      Support added to accept objects implementing the :class:`os.PathLike`
247      interface.
248
249
250.. function:: fsdecode(filename)
251
252   Decode the :term:`path-like <path-like object>` *filename* from the
253   :term:`filesystem encoding and error handler`; return :class:`str`
254   unchanged.
255
256   :func:`fsencode` is the reverse function.
257
258   .. versionadded:: 3.2
259
260   .. versionchanged:: 3.6
261      Support added to accept objects implementing the :class:`os.PathLike`
262      interface.
263
264
265.. function:: fspath(path)
266
267   Return the file system representation of the path.
268
269   If :class:`str` or :class:`bytes` is passed in, it is returned unchanged.
270   Otherwise :meth:`~os.PathLike.__fspath__` is called and its value is
271   returned as long as it is a :class:`str` or :class:`bytes` object.
272   In all other cases, :exc:`TypeError` is raised.
273
274   .. versionadded:: 3.6
275
276
277.. class:: PathLike
278
279   An :term:`abstract base class` for objects representing a file system path,
280   e.g. :class:`pathlib.PurePath`.
281
282   .. versionadded:: 3.6
283
284   .. abstractmethod:: __fspath__()
285
286      Return the file system path representation of the object.
287
288      The method should only return a :class:`str` or :class:`bytes` object,
289      with the preference being for :class:`str`.
290
291
292.. function:: getenv(key, default=None)
293
294   Return the value of the environment variable *key* if it exists, or
295   *default* if it doesn't. *key*, *default* and the result are str.
296
297   On Unix, keys and values are decoded with :func:`sys.getfilesystemencoding`
298   and ``'surrogateescape'`` error handler. Use :func:`os.getenvb` if you
299   would like to use a different encoding.
300
301   .. availability:: most flavors of Unix, Windows.
302
303
304.. function:: getenvb(key, default=None)
305
306   Return the value of the environment variable *key* if it exists, or
307   *default* if it doesn't. *key*, *default* and the result are bytes.
308
309   :func:`getenvb` is only available if :data:`supports_bytes_environ`
310   is ``True``.
311
312   .. availability:: most flavors of Unix.
313
314   .. versionadded:: 3.2
315
316
317.. function:: get_exec_path(env=None)
318
319   Returns the list of directories that will be searched for a named
320   executable, similar to a shell, when launching a process.
321   *env*, when specified, should be an environment variable dictionary
322   to lookup the PATH in.
323   By default, when *env* is ``None``, :data:`environ` is used.
324
325   .. versionadded:: 3.2
326
327
328.. function:: getegid()
329
330   Return the effective group id of the current process.  This corresponds to the
331   "set id" bit on the file being executed in the current process.
332
333   .. availability:: Unix.
334
335
336.. function:: geteuid()
337
338   .. index:: single: user; effective id
339
340   Return the current process's effective user id.
341
342   .. availability:: Unix.
343
344
345.. function:: getgid()
346
347   .. index:: single: process; group
348
349   Return the real group id of the current process.
350
351   .. availability:: Unix.
352
353
354.. function:: getgrouplist(user, group)
355
356   Return list of group ids that *user* belongs to. If *group* is not in the
357   list, it is included; typically, *group* is specified as the group ID
358   field from the password record for *user*.
359
360   .. availability:: Unix.
361
362   .. versionadded:: 3.3
363
364
365.. function:: getgroups()
366
367   Return list of supplemental group ids associated with the current process.
368
369   .. availability:: Unix.
370
371   .. note::
372
373      On macOS, :func:`getgroups` behavior differs somewhat from
374      other Unix platforms. If the Python interpreter was built with a
375      deployment target of :const:`10.5` or earlier, :func:`getgroups` returns
376      the list of effective group ids associated with the current user process;
377      this list is limited to a system-defined number of entries, typically 16,
378      and may be modified by calls to :func:`setgroups` if suitably privileged.
379      If built with a deployment target greater than :const:`10.5`,
380      :func:`getgroups` returns the current group access list for the user
381      associated with the effective user id of the process; the group access
382      list may change over the lifetime of the process, it is not affected by
383      calls to :func:`setgroups`, and its length is not limited to 16.  The
384      deployment target value, :const:`MACOSX_DEPLOYMENT_TARGET`, can be
385      obtained with :func:`sysconfig.get_config_var`.
386
387
388.. function:: getlogin()
389
390   Return the name of the user logged in on the controlling terminal of the
391   process.  For most purposes, it is more useful to use
392   :func:`getpass.getuser` since the latter checks the environment variables
393   :envvar:`LOGNAME` or :envvar:`USERNAME` to find out who the user is, and
394   falls back to ``pwd.getpwuid(os.getuid())[0]`` to get the login name of the
395   current real user id.
396
397   .. availability:: Unix, Windows.
398
399
400.. function:: getpgid(pid)
401
402   Return the process group id of the process with process id *pid*. If *pid* is 0,
403   the process group id of the current process is returned.
404
405   .. availability:: Unix.
406
407.. function:: getpgrp()
408
409   .. index:: single: process; group
410
411   Return the id of the current process group.
412
413   .. availability:: Unix.
414
415
416.. function:: getpid()
417
418   .. index:: single: process; id
419
420   Return the current process id.
421
422
423.. function:: getppid()
424
425   .. index:: single: process; id of parent
426
427   Return the parent's process id.  When the parent process has exited, on Unix
428   the id returned is the one of the init process (1), on Windows it is still
429   the same id, which may be already reused by another process.
430
431   .. availability:: Unix, Windows.
432
433   .. versionchanged:: 3.2
434      Added support for Windows.
435
436
437.. function:: getpriority(which, who)
438
439   .. index:: single: process; scheduling priority
440
441   Get program scheduling priority.  The value *which* is one of
442   :const:`PRIO_PROCESS`, :const:`PRIO_PGRP`, or :const:`PRIO_USER`, and *who*
443   is interpreted relative to *which* (a process identifier for
444   :const:`PRIO_PROCESS`, process group identifier for :const:`PRIO_PGRP`, and a
445   user ID for :const:`PRIO_USER`).  A zero value for *who* denotes
446   (respectively) the calling process, the process group of the calling process,
447   or the real user ID of the calling process.
448
449   .. availability:: Unix.
450
451   .. versionadded:: 3.3
452
453
454.. data:: PRIO_PROCESS
455          PRIO_PGRP
456          PRIO_USER
457
458   Parameters for the :func:`getpriority` and :func:`setpriority` functions.
459
460   .. availability:: Unix.
461
462   .. versionadded:: 3.3
463
464
465.. function:: getresuid()
466
467   Return a tuple (ruid, euid, suid) denoting the current process's
468   real, effective, and saved user ids.
469
470   .. availability:: Unix.
471
472   .. versionadded:: 3.2
473
474
475.. function:: getresgid()
476
477   Return a tuple (rgid, egid, sgid) denoting the current process's
478   real, effective, and saved group ids.
479
480   .. availability:: Unix.
481
482   .. versionadded:: 3.2
483
484
485.. function:: getuid()
486
487   .. index:: single: user; id
488
489   Return the current process's real user id.
490
491   .. availability:: Unix.
492
493
494.. function:: initgroups(username, gid)
495
496   Call the system initgroups() to initialize the group access list with all of
497   the groups of which the specified username is a member, plus the specified
498   group id.
499
500   .. availability:: Unix.
501
502   .. versionadded:: 3.2
503
504
505.. function:: putenv(key, value)
506
507   .. index:: single: environment variables; setting
508
509   Set the environment variable named *key* to the string *value*.  Such
510   changes to the environment affect subprocesses started with :func:`os.system`,
511   :func:`popen` or :func:`fork` and :func:`execv`.
512
513   Assignments to items in ``os.environ`` are automatically translated into
514   corresponding calls to :func:`putenv`; however, calls to :func:`putenv`
515   don't update ``os.environ``, so it is actually preferable to assign to items
516   of ``os.environ``.
517
518   .. note::
519
520      On some platforms, including FreeBSD and macOS, setting ``environ`` may
521      cause memory leaks. Refer to the system documentation for :c:func:`putenv`.
522
523   .. audit-event:: os.putenv key,value os.putenv
524
525   .. versionchanged:: 3.9
526      The function is now always available.
527
528
529.. function:: setegid(egid)
530
531   Set the current process's effective group id.
532
533   .. availability:: Unix.
534
535
536.. function:: seteuid(euid)
537
538   Set the current process's effective user id.
539
540   .. availability:: Unix.
541
542
543.. function:: setgid(gid)
544
545   Set the current process' group id.
546
547   .. availability:: Unix.
548
549
550.. function:: setgroups(groups)
551
552   Set the list of supplemental group ids associated with the current process to
553   *groups*. *groups* must be a sequence, and each element must be an integer
554   identifying a group. This operation is typically available only to the superuser.
555
556   .. availability:: Unix.
557
558   .. note:: On macOS, the length of *groups* may not exceed the
559      system-defined maximum number of effective group ids, typically 16.
560      See the documentation for :func:`getgroups` for cases where it may not
561      return the same group list set by calling setgroups().
562
563.. function:: setpgrp()
564
565   Call the system call :c:func:`setpgrp` or ``setpgrp(0, 0)`` depending on
566   which version is implemented (if any).  See the Unix manual for the semantics.
567
568   .. availability:: Unix.
569
570
571.. function:: setpgid(pid, pgrp)
572
573   Call the system call :c:func:`setpgid` to set the process group id of the
574   process with id *pid* to the process group with id *pgrp*.  See the Unix manual
575   for the semantics.
576
577   .. availability:: Unix.
578
579
580.. function:: setpriority(which, who, priority)
581
582   .. index:: single: process; scheduling priority
583
584   Set program scheduling priority. The value *which* is one of
585   :const:`PRIO_PROCESS`, :const:`PRIO_PGRP`, or :const:`PRIO_USER`, and *who*
586   is interpreted relative to *which* (a process identifier for
587   :const:`PRIO_PROCESS`, process group identifier for :const:`PRIO_PGRP`, and a
588   user ID for :const:`PRIO_USER`). A zero value for *who* denotes
589   (respectively) the calling process, the process group of the calling process,
590   or the real user ID of the calling process.
591   *priority* is a value in the range -20 to 19. The default priority is 0;
592   lower priorities cause more favorable scheduling.
593
594   .. availability:: Unix.
595
596   .. versionadded:: 3.3
597
598
599.. function:: setregid(rgid, egid)
600
601   Set the current process's real and effective group ids.
602
603   .. availability:: Unix.
604
605
606.. function:: setresgid(rgid, egid, sgid)
607
608   Set the current process's real, effective, and saved group ids.
609
610   .. availability:: Unix.
611
612   .. versionadded:: 3.2
613
614
615.. function:: setresuid(ruid, euid, suid)
616
617   Set the current process's real, effective, and saved user ids.
618
619   .. availability:: Unix.
620
621   .. versionadded:: 3.2
622
623
624.. function:: setreuid(ruid, euid)
625
626   Set the current process's real and effective user ids.
627
628   .. availability:: Unix.
629
630
631.. function:: getsid(pid)
632
633   Call the system call :c:func:`getsid`.  See the Unix manual for the semantics.
634
635   .. availability:: Unix.
636
637
638.. function:: setsid()
639
640   Call the system call :c:func:`setsid`.  See the Unix manual for the semantics.
641
642   .. availability:: Unix.
643
644
645.. function:: setuid(uid)
646
647   .. index:: single: user; id, setting
648
649   Set the current process's user id.
650
651   .. availability:: Unix.
652
653
654.. placed in this section since it relates to errno.... a little weak
655.. function:: strerror(code)
656
657   Return the error message corresponding to the error code in *code*.
658   On platforms where :c:func:`strerror` returns ``NULL`` when given an unknown
659   error number, :exc:`ValueError` is raised.
660
661
662.. data:: supports_bytes_environ
663
664   ``True`` if the native OS type of the environment is bytes (eg. ``False`` on
665   Windows).
666
667   .. versionadded:: 3.2
668
669
670.. function:: umask(mask)
671
672   Set the current numeric umask and return the previous umask.
673
674
675.. function:: uname()
676
677   .. index::
678      single: gethostname() (in module socket)
679      single: gethostbyaddr() (in module socket)
680
681   Returns information identifying the current operating system.
682   The return value is an object with five attributes:
683
684   * :attr:`sysname` - operating system name
685   * :attr:`nodename` - name of machine on network (implementation-defined)
686   * :attr:`release` - operating system release
687   * :attr:`version` - operating system version
688   * :attr:`machine` - hardware identifier
689
690   For backwards compatibility, this object is also iterable, behaving
691   like a five-tuple containing :attr:`sysname`, :attr:`nodename`,
692   :attr:`release`, :attr:`version`, and :attr:`machine`
693   in that order.
694
695   Some systems truncate :attr:`nodename` to 8 characters or to the
696   leading component; a better way to get the hostname is
697   :func:`socket.gethostname`  or even
698   ``socket.gethostbyaddr(socket.gethostname())``.
699
700   .. availability:: recent flavors of Unix.
701
702   .. versionchanged:: 3.3
703      Return type changed from a tuple to a tuple-like object
704      with named attributes.
705
706
707.. function:: unsetenv(key)
708
709   .. index:: single: environment variables; deleting
710
711   Unset (delete) the environment variable named *key*. Such changes to the
712   environment affect subprocesses started with :func:`os.system`, :func:`popen` or
713   :func:`fork` and :func:`execv`.
714
715   Deletion of items in ``os.environ`` is automatically translated into a
716   corresponding call to :func:`unsetenv`; however, calls to :func:`unsetenv`
717   don't update ``os.environ``, so it is actually preferable to delete items of
718   ``os.environ``.
719
720   .. audit-event:: os.unsetenv key os.unsetenv
721
722   .. versionchanged:: 3.9
723      The function is now always available and is also available on Windows.
724
725
726.. _os-newstreams:
727
728File Object Creation
729--------------------
730
731These functions create new :term:`file objects <file object>`.  (See also
732:func:`~os.open` for opening file descriptors.)
733
734
735.. function:: fdopen(fd, *args, **kwargs)
736
737   Return an open file object connected to the file descriptor *fd*.  This is an
738   alias of the :func:`open` built-in function and accepts the same arguments.
739   The only difference is that the first argument of :func:`fdopen` must always
740   be an integer.
741
742
743.. _os-fd-ops:
744
745File Descriptor Operations
746--------------------------
747
748These functions operate on I/O streams referenced using file descriptors.
749
750File descriptors are small integers corresponding to a file that has been opened
751by the current process.  For example, standard input is usually file descriptor
7520, standard output is 1, and standard error is 2.  Further files opened by a
753process will then be assigned 3, 4, 5, and so forth.  The name "file descriptor"
754is slightly deceptive; on Unix platforms, sockets and pipes are also referenced
755by file descriptors.
756
757The :meth:`~io.IOBase.fileno` method can be used to obtain the file descriptor
758associated with a :term:`file object` when required.  Note that using the file
759descriptor directly will bypass the file object methods, ignoring aspects such
760as internal buffering of data.
761
762
763.. function:: close(fd)
764
765   Close file descriptor *fd*.
766
767   .. note::
768
769      This function is intended for low-level I/O and must be applied to a file
770      descriptor as returned by :func:`os.open` or :func:`pipe`.  To close a "file
771      object" returned by the built-in function :func:`open` or by :func:`popen` or
772      :func:`fdopen`, use its :meth:`~io.IOBase.close` method.
773
774
775.. function:: closerange(fd_low, fd_high)
776
777   Close all file descriptors from *fd_low* (inclusive) to *fd_high* (exclusive),
778   ignoring errors. Equivalent to (but much faster than)::
779
780      for fd in range(fd_low, fd_high):
781          try:
782              os.close(fd)
783          except OSError:
784              pass
785
786
787.. function:: copy_file_range(src, dst, count, offset_src=None, offset_dst=None)
788
789   Copy *count* bytes from file descriptor *src*, starting from offset
790   *offset_src*, to file descriptor *dst*, starting from offset *offset_dst*.
791   If *offset_src* is None, then *src* is read from the current position;
792   respectively for *offset_dst*. The files pointed by *src* and *dst*
793   must reside in the same filesystem, otherwise an :exc:`OSError` is
794   raised with :attr:`~OSError.errno` set to :data:`errno.EXDEV`.
795
796   This copy is done without the additional cost of transferring data
797   from the kernel to user space and then back into the kernel. Additionally,
798   some filesystems could implement extra optimizations. The copy is done as if
799   both files are opened as binary.
800
801   The return value is the amount of bytes copied. This could be less than the
802   amount requested.
803
804   .. availability:: Linux kernel >= 4.5 or glibc >= 2.27.
805
806   .. versionadded:: 3.8
807
808
809.. function:: device_encoding(fd)
810
811   Return a string describing the encoding of the device associated with *fd*
812   if it is connected to a terminal; else return :const:`None`.
813
814   On Unix, if the :ref:`Python UTF-8 Mode <utf8-mode>` is enabled, return
815   ``'UTF-8'`` rather than the device encoding.
816
817   .. versionchanged:: 3.10
818      On Unix, the function now implements the Python UTF-8 Mode.
819
820
821.. function:: dup(fd)
822
823   Return a duplicate of file descriptor *fd*. The new file descriptor is
824   :ref:`non-inheritable <fd_inheritance>`.
825
826   On Windows, when duplicating a standard stream (0: stdin, 1: stdout,
827   2: stderr), the new file descriptor is :ref:`inheritable
828   <fd_inheritance>`.
829
830   .. versionchanged:: 3.4
831      The new file descriptor is now non-inheritable.
832
833
834.. function:: dup2(fd, fd2, inheritable=True)
835
836   Duplicate file descriptor *fd* to *fd2*, closing the latter first if
837   necessary. Return *fd2*. The new file descriptor is :ref:`inheritable
838   <fd_inheritance>` by default or non-inheritable if *inheritable*
839   is ``False``.
840
841   .. versionchanged:: 3.4
842      Add the optional *inheritable* parameter.
843
844   .. versionchanged:: 3.7
845      Return *fd2* on success. Previously, ``None`` was always returned.
846
847
848.. function:: fchmod(fd, mode)
849
850   Change the mode of the file given by *fd* to the numeric *mode*.  See the
851   docs for :func:`chmod` for possible values of *mode*.  As of Python 3.3, this
852   is equivalent to ``os.chmod(fd, mode)``.
853
854   .. audit-event:: os.chmod path,mode,dir_fd os.fchmod
855
856   .. availability:: Unix.
857
858
859.. function:: fchown(fd, uid, gid)
860
861   Change the owner and group id of the file given by *fd* to the numeric *uid*
862   and *gid*.  To leave one of the ids unchanged, set it to -1.  See
863   :func:`chown`.  As of Python 3.3, this is equivalent to ``os.chown(fd, uid,
864   gid)``.
865
866   .. audit-event:: os.chown path,uid,gid,dir_fd os.fchown
867
868   .. availability:: Unix.
869
870
871.. function:: fdatasync(fd)
872
873   Force write of file with filedescriptor *fd* to disk. Does not force update of
874   metadata.
875
876   .. availability:: Unix.
877
878   .. note::
879      This function is not available on MacOS.
880
881
882.. function:: fpathconf(fd, name)
883
884   Return system configuration information relevant to an open file. *name*
885   specifies the configuration value to retrieve; it may be a string which is the
886   name of a defined system value; these names are specified in a number of
887   standards (POSIX.1, Unix 95, Unix 98, and others).  Some platforms define
888   additional names as well.  The names known to the host operating system are
889   given in the ``pathconf_names`` dictionary.  For configuration variables not
890   included in that mapping, passing an integer for *name* is also accepted.
891
892   If *name* is a string and is not known, :exc:`ValueError` is raised.  If a
893   specific value for *name* is not supported by the host system, even if it is
894   included in ``pathconf_names``, an :exc:`OSError` is raised with
895   :const:`errno.EINVAL` for the error number.
896
897   As of Python 3.3, this is equivalent to ``os.pathconf(fd, name)``.
898
899   .. availability:: Unix.
900
901
902.. function:: fstat(fd)
903
904   Get the status of the file descriptor *fd*. Return a :class:`stat_result`
905   object.
906
907   As of Python 3.3, this is equivalent to ``os.stat(fd)``.
908
909   .. seealso::
910
911      The :func:`.stat` function.
912
913
914.. function:: fstatvfs(fd)
915
916   Return information about the filesystem containing the file associated with
917   file descriptor *fd*, like :func:`statvfs`.  As of Python 3.3, this is
918   equivalent to ``os.statvfs(fd)``.
919
920   .. availability:: Unix.
921
922
923.. function:: fsync(fd)
924
925   Force write of file with filedescriptor *fd* to disk.  On Unix, this calls the
926   native :c:func:`fsync` function; on Windows, the MS :c:func:`_commit` function.
927
928   If you're starting with a buffered Python :term:`file object` *f*, first do
929   ``f.flush()``, and then do ``os.fsync(f.fileno())``, to ensure that all internal
930   buffers associated with *f* are written to disk.
931
932   .. availability:: Unix, Windows.
933
934
935.. function:: ftruncate(fd, length)
936
937   Truncate the file corresponding to file descriptor *fd*, so that it is at
938   most *length* bytes in size.  As of Python 3.3, this is equivalent to
939   ``os.truncate(fd, length)``.
940
941   .. audit-event:: os.truncate fd,length os.ftruncate
942
943   .. availability:: Unix, Windows.
944
945   .. versionchanged:: 3.5
946      Added support for Windows
947
948
949.. function:: get_blocking(fd)
950
951   Get the blocking mode of the file descriptor: ``False`` if the
952   :data:`O_NONBLOCK` flag is set, ``True`` if the flag is cleared.
953
954   See also :func:`set_blocking` and :meth:`socket.socket.setblocking`.
955
956   .. availability:: Unix.
957
958   .. versionadded:: 3.5
959
960
961.. function:: isatty(fd)
962
963   Return ``True`` if the file descriptor *fd* is open and connected to a
964   tty(-like) device, else ``False``.
965
966
967.. function:: lockf(fd, cmd, len)
968
969   Apply, test or remove a POSIX lock on an open file descriptor.
970   *fd* is an open file descriptor.
971   *cmd* specifies the command to use - one of :data:`F_LOCK`, :data:`F_TLOCK`,
972   :data:`F_ULOCK` or :data:`F_TEST`.
973   *len* specifies the section of the file to lock.
974
975   .. audit-event:: os.lockf fd,cmd,len os.lockf
976
977   .. availability:: Unix.
978
979   .. versionadded:: 3.3
980
981
982.. data:: F_LOCK
983          F_TLOCK
984          F_ULOCK
985          F_TEST
986
987   Flags that specify what action :func:`lockf` will take.
988
989   .. availability:: Unix.
990
991   .. versionadded:: 3.3
992
993
994.. function:: lseek(fd, pos, how)
995
996   Set the current position of file descriptor *fd* to position *pos*, modified
997   by *how*: :const:`SEEK_SET` or ``0`` to set the position relative to the
998   beginning of the file; :const:`SEEK_CUR` or ``1`` to set it relative to the
999   current position; :const:`SEEK_END` or ``2`` to set it relative to the end of
1000   the file. Return the new cursor position in bytes, starting from the beginning.
1001
1002
1003.. data:: SEEK_SET
1004          SEEK_CUR
1005          SEEK_END
1006
1007   Parameters to the :func:`lseek` function. Their values are 0, 1, and 2,
1008   respectively.
1009
1010   .. versionadded:: 3.3
1011      Some operating systems could support additional values, like
1012      :data:`os.SEEK_HOLE` or :data:`os.SEEK_DATA`.
1013
1014
1015.. function:: open(path, flags, mode=0o777, *, dir_fd=None)
1016
1017   Open the file *path* and set various flags according to *flags* and possibly
1018   its mode according to *mode*.  When computing *mode*, the current umask value
1019   is first masked out.  Return the file descriptor for the newly opened file.
1020   The new file descriptor is :ref:`non-inheritable <fd_inheritance>`.
1021
1022   For a description of the flag and mode values, see the C run-time documentation;
1023   flag constants (like :const:`O_RDONLY` and :const:`O_WRONLY`) are defined in
1024   the :mod:`os` module.  In particular, on Windows adding
1025   :const:`O_BINARY` is needed to open files in binary mode.
1026
1027   This function can support :ref:`paths relative to directory descriptors
1028   <dir_fd>` with the *dir_fd* parameter.
1029
1030   .. audit-event:: open path,mode,flags os.open
1031
1032   .. versionchanged:: 3.4
1033      The new file descriptor is now non-inheritable.
1034
1035   .. note::
1036
1037      This function is intended for low-level I/O.  For normal usage, use the
1038      built-in function :func:`open`, which returns a :term:`file object` with
1039      :meth:`~file.read` and :meth:`~file.write` methods (and many more).  To
1040      wrap a file descriptor in a file object, use :func:`fdopen`.
1041
1042   .. versionadded:: 3.3
1043      The *dir_fd* argument.
1044
1045   .. versionchanged:: 3.5
1046      If the system call is interrupted and the signal handler does not raise an
1047      exception, the function now retries the system call instead of raising an
1048      :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
1049
1050   .. versionchanged:: 3.6
1051      Accepts a :term:`path-like object`.
1052
1053The following constants are options for the *flags* parameter to the
1054:func:`~os.open` function.  They can be combined using the bitwise OR operator
1055``|``.  Some of them are not available on all platforms.  For descriptions of
1056their availability and use, consult the :manpage:`open(2)` manual page on Unix
1057or `the MSDN <https://msdn.microsoft.com/en-us/library/z0kc8e3z.aspx>`_ on Windows.
1058
1059
1060.. data:: O_RDONLY
1061          O_WRONLY
1062          O_RDWR
1063          O_APPEND
1064          O_CREAT
1065          O_EXCL
1066          O_TRUNC
1067
1068   The above constants are available on Unix and Windows.
1069
1070
1071.. data:: O_DSYNC
1072          O_RSYNC
1073          O_SYNC
1074          O_NDELAY
1075          O_NONBLOCK
1076          O_NOCTTY
1077          O_CLOEXEC
1078
1079   The above constants are only available on Unix.
1080
1081   .. versionchanged:: 3.3
1082      Add :data:`O_CLOEXEC` constant.
1083
1084.. data:: O_BINARY
1085          O_NOINHERIT
1086          O_SHORT_LIVED
1087          O_TEMPORARY
1088          O_RANDOM
1089          O_SEQUENTIAL
1090          O_TEXT
1091
1092   The above constants are only available on Windows.
1093
1094.. data:: O_EVTONLY
1095          O_FSYNC
1096          O_SYMLINK
1097          O_NOFOLLOW_ANY
1098
1099   The above constants are only available on macOS.
1100
1101   .. versionchanged:: 3.10
1102      Add :data:`O_EVTONLY`, :data:`O_FSYNC`, :data:`O_SYMLINK`
1103      and :data:`O_NOFOLLOW_ANY` constants.
1104
1105.. data:: O_ASYNC
1106          O_DIRECT
1107          O_DIRECTORY
1108          O_NOFOLLOW
1109          O_NOATIME
1110          O_PATH
1111          O_TMPFILE
1112          O_SHLOCK
1113          O_EXLOCK
1114
1115   The above constants are extensions and not present if they are not defined by
1116   the C library.
1117
1118   .. versionchanged:: 3.4
1119      Add :data:`O_PATH` on systems that support it.
1120      Add :data:`O_TMPFILE`, only available on Linux Kernel 3.11
1121        or newer.
1122
1123
1124.. function:: openpty()
1125
1126   .. index:: module: pty
1127
1128   Open a new pseudo-terminal pair. Return a pair of file descriptors
1129   ``(master, slave)`` for the pty and the tty, respectively. The new file
1130   descriptors are :ref:`non-inheritable <fd_inheritance>`. For a (slightly) more
1131   portable approach, use the :mod:`pty` module.
1132
1133   .. availability:: some flavors of Unix.
1134
1135   .. versionchanged:: 3.4
1136      The new file descriptors are now non-inheritable.
1137
1138
1139.. function:: pipe()
1140
1141   Create a pipe.  Return a pair of file descriptors ``(r, w)`` usable for
1142   reading and writing, respectively. The new file descriptor is
1143   :ref:`non-inheritable <fd_inheritance>`.
1144
1145   .. availability:: Unix, Windows.
1146
1147   .. versionchanged:: 3.4
1148      The new file descriptors are now non-inheritable.
1149
1150
1151.. function:: pipe2(flags)
1152
1153   Create a pipe with *flags* set atomically.
1154   *flags* can be constructed by ORing together one or more of these values:
1155   :data:`O_NONBLOCK`, :data:`O_CLOEXEC`.
1156   Return a pair of file descriptors ``(r, w)`` usable for reading and writing,
1157   respectively.
1158
1159   .. availability:: some flavors of Unix.
1160
1161   .. versionadded:: 3.3
1162
1163
1164.. function:: posix_fallocate(fd, offset, len)
1165
1166   Ensures that enough disk space is allocated for the file specified by *fd*
1167   starting from *offset* and continuing for *len* bytes.
1168
1169   .. availability:: Unix.
1170
1171   .. versionadded:: 3.3
1172
1173
1174.. function:: posix_fadvise(fd, offset, len, advice)
1175
1176   Announces an intention to access data in a specific pattern thus allowing
1177   the kernel to make optimizations.
1178   The advice applies to the region of the file specified by *fd* starting at
1179   *offset* and continuing for *len* bytes.
1180   *advice* is one of :data:`POSIX_FADV_NORMAL`, :data:`POSIX_FADV_SEQUENTIAL`,
1181   :data:`POSIX_FADV_RANDOM`, :data:`POSIX_FADV_NOREUSE`,
1182   :data:`POSIX_FADV_WILLNEED` or :data:`POSIX_FADV_DONTNEED`.
1183
1184   .. availability:: Unix.
1185
1186   .. versionadded:: 3.3
1187
1188
1189.. data:: POSIX_FADV_NORMAL
1190          POSIX_FADV_SEQUENTIAL
1191          POSIX_FADV_RANDOM
1192          POSIX_FADV_NOREUSE
1193          POSIX_FADV_WILLNEED
1194          POSIX_FADV_DONTNEED
1195
1196   Flags that can be used in *advice* in :func:`posix_fadvise` that specify
1197   the access pattern that is likely to be used.
1198
1199   .. availability:: Unix.
1200
1201   .. versionadded:: 3.3
1202
1203
1204.. function:: pread(fd, n, offset)
1205
1206   Read at most *n* bytes from file descriptor *fd* at a position of *offset*,
1207   leaving the file offset unchanged.
1208
1209   Return a bytestring containing the bytes read. If the end of the file
1210   referred to by *fd* has been reached, an empty bytes object is returned.
1211
1212   .. availability:: Unix.
1213
1214   .. versionadded:: 3.3
1215
1216
1217.. function:: preadv(fd, buffers, offset, flags=0)
1218
1219   Read from a file descriptor *fd* at a position of *offset* into mutable
1220   :term:`bytes-like objects <bytes-like object>` *buffers*, leaving the file
1221   offset unchanged.  Transfer data into each buffer until it is full and then
1222   move on to the next buffer in the sequence to hold the rest of the data.
1223
1224   The flags argument contains a bitwise OR of zero or more of the following
1225   flags:
1226
1227   - :data:`RWF_HIPRI`
1228   - :data:`RWF_NOWAIT`
1229
1230   Return the total number of bytes actually read which can be less than the
1231   total capacity of all the objects.
1232
1233   The operating system may set a limit (:func:`sysconf` value
1234   ``'SC_IOV_MAX'``) on the number of buffers that can be used.
1235
1236   Combine the functionality of :func:`os.readv` and :func:`os.pread`.
1237
1238   .. availability:: Linux 2.6.30 and newer, FreeBSD 6.0 and newer,
1239      OpenBSD 2.7 and newer, AIX 7.1 and newer. Using flags requires
1240      Linux 4.6 or newer.
1241
1242   .. versionadded:: 3.7
1243
1244
1245.. data:: RWF_NOWAIT
1246
1247   Do not wait for data which is not immediately available. If this flag is
1248   specified, the system call will return instantly if it would have to read
1249   data from the backing storage or wait for a lock.
1250
1251   If some data was successfully read, it will return the number of bytes read.
1252   If no bytes were read, it will return ``-1`` and set errno to
1253   :data:`errno.EAGAIN`.
1254
1255   .. availability:: Linux 4.14 and newer.
1256
1257   .. versionadded:: 3.7
1258
1259
1260.. data:: RWF_HIPRI
1261
1262   High priority read/write. Allows block-based filesystems to use polling
1263   of the device, which provides lower latency, but may use additional
1264   resources.
1265
1266   Currently, on Linux, this feature is usable only on a file descriptor opened
1267   using the :data:`O_DIRECT` flag.
1268
1269   .. availability:: Linux 4.6 and newer.
1270
1271   .. versionadded:: 3.7
1272
1273
1274.. function:: pwrite(fd, str, offset)
1275
1276   Write the bytestring in *str* to file descriptor *fd* at position of
1277   *offset*, leaving the file offset unchanged.
1278
1279   Return the number of bytes actually written.
1280
1281   .. availability:: Unix.
1282
1283   .. versionadded:: 3.3
1284
1285
1286.. function:: pwritev(fd, buffers, offset, flags=0)
1287
1288   Write the *buffers* contents to file descriptor *fd* at a offset *offset*,
1289   leaving the file offset unchanged.  *buffers* must be a sequence of
1290   :term:`bytes-like objects <bytes-like object>`. Buffers are processed in
1291   array order. Entire contents of the first buffer is written before
1292   proceeding to the second, and so on.
1293
1294   The flags argument contains a bitwise OR of zero or more of the following
1295   flags:
1296
1297   - :data:`RWF_DSYNC`
1298   - :data:`RWF_SYNC`
1299   - :data:`RWF_APPEND`
1300
1301   Return the total number of bytes actually written.
1302
1303   The operating system may set a limit (:func:`sysconf` value
1304   ``'SC_IOV_MAX'``) on the number of buffers that can be used.
1305
1306   Combine the functionality of :func:`os.writev` and :func:`os.pwrite`.
1307
1308   .. availability:: Linux 2.6.30 and newer, FreeBSD 6.0 and newer,
1309      OpenBSD 2.7 and newer, AIX 7.1 and newer. Using flags requires
1310      Linux 4.7 or newer.
1311
1312   .. versionadded:: 3.7
1313
1314
1315.. data:: RWF_DSYNC
1316
1317   Provide a per-write equivalent of the :data:`O_DSYNC` :func:`os.open` flag.
1318   This flag effect applies only to the data range written by the system call.
1319
1320   .. availability:: Linux 4.7 and newer.
1321
1322   .. versionadded:: 3.7
1323
1324
1325.. data:: RWF_SYNC
1326
1327   Provide a per-write equivalent of the :data:`O_SYNC` :func:`os.open` flag.
1328   This flag effect applies only to the data range written by the system call.
1329
1330   .. availability:: Linux 4.7 and newer.
1331
1332   .. versionadded:: 3.7
1333
1334
1335.. data:: RWF_APPEND
1336
1337   Provide a per-write equivalent of the :data:`O_APPEND` :func:`os.open`
1338   flag. This flag is meaningful only for :func:`os.pwritev`, and its
1339   effect applies only to the data range written by the system call. The
1340   *offset* argument does not affect the write operation; the data is always
1341   appended to the end of the file. However, if the *offset* argument is
1342   ``-1``, the current file *offset* is updated.
1343
1344   .. availability:: Linux 4.16 and newer.
1345
1346   .. versionadded:: 3.10
1347
1348
1349.. function:: read(fd, n)
1350
1351   Read at most *n* bytes from file descriptor *fd*.
1352
1353   Return a bytestring containing the bytes read. If the end of the file
1354   referred to by *fd* has been reached, an empty bytes object is returned.
1355
1356   .. note::
1357
1358      This function is intended for low-level I/O and must be applied to a file
1359      descriptor as returned by :func:`os.open` or :func:`pipe`.  To read a
1360      "file object" returned by the built-in function :func:`open` or by
1361      :func:`popen` or :func:`fdopen`, or :data:`sys.stdin`, use its
1362      :meth:`~file.read` or :meth:`~file.readline` methods.
1363
1364   .. versionchanged:: 3.5
1365      If the system call is interrupted and the signal handler does not raise an
1366      exception, the function now retries the system call instead of raising an
1367      :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
1368
1369
1370.. function:: sendfile(out_fd, in_fd, offset, count)
1371              sendfile(out_fd, in_fd, offset, count, headers=(), trailers=(), flags=0)
1372
1373   Copy *count* bytes from file descriptor *in_fd* to file descriptor *out_fd*
1374   starting at *offset*.
1375   Return the number of bytes sent. When EOF is reached return ``0``.
1376
1377   The first function notation is supported by all platforms that define
1378   :func:`sendfile`.
1379
1380   On Linux, if *offset* is given as ``None``, the bytes are read from the
1381   current position of *in_fd* and the position of *in_fd* is updated.
1382
1383   The second case may be used on macOS and FreeBSD where *headers* and
1384   *trailers* are arbitrary sequences of buffers that are written before and
1385   after the data from *in_fd* is written. It returns the same as the first case.
1386
1387   On macOS and FreeBSD, a value of ``0`` for *count* specifies to send until
1388   the end of *in_fd* is reached.
1389
1390   All platforms support sockets as *out_fd* file descriptor, and some platforms
1391   allow other types (e.g. regular file, pipe) as well.
1392
1393   Cross-platform applications should not use *headers*, *trailers* and *flags*
1394   arguments.
1395
1396   .. availability:: Unix.
1397
1398   .. note::
1399
1400      For a higher-level wrapper of :func:`sendfile`, see
1401      :meth:`socket.socket.sendfile`.
1402
1403   .. versionadded:: 3.3
1404
1405   .. versionchanged:: 3.9
1406      Parameters *out* and *in* was renamed to *out_fd* and *in_fd*.
1407
1408
1409.. function:: set_blocking(fd, blocking)
1410
1411   Set the blocking mode of the specified file descriptor. Set the
1412   :data:`O_NONBLOCK` flag if blocking is ``False``, clear the flag otherwise.
1413
1414   See also :func:`get_blocking` and :meth:`socket.socket.setblocking`.
1415
1416   .. availability:: Unix.
1417
1418   .. versionadded:: 3.5
1419
1420
1421.. data:: SF_NODISKIO
1422          SF_MNOWAIT
1423          SF_SYNC
1424
1425   Parameters to the :func:`sendfile` function, if the implementation supports
1426   them.
1427
1428   .. availability:: Unix.
1429
1430   .. versionadded:: 3.3
1431
1432
1433.. function:: splice(src, dst, count, offset_src=None, offset_dst=None)
1434
1435   Transfer *count* bytes from file descriptor *src*, starting from offset
1436   *offset_src*, to file descriptor *dst*, starting from offset *offset_dst*.
1437   At least one of the file descriptors must refer to a pipe. If *offset_src*
1438   is None, then *src* is read from the current position; respectively for
1439   *offset_dst*. The offset associated to the file descriptor that refers to a
1440   pipe must be ``None``. The files pointed by *src* and *dst* must reside in
1441   the same filesystem, otherwise an :exc:`OSError` is raised with
1442   :attr:`~OSError.errno` set to :data:`errno.EXDEV`.
1443
1444   This copy is done without the additional cost of transferring data
1445   from the kernel to user space and then back into the kernel. Additionally,
1446   some filesystems could implement extra optimizations. The copy is done as if
1447   both files are opened as binary.
1448
1449   Upon successful completion, returns the number of bytes spliced to or from
1450   the pipe. A return value of 0 means end of input. If *src* refers to a
1451   pipe, then this means that there was no data to transfer, and it would not
1452   make sense to block because there are no writers connected to the write end
1453   of the pipe.
1454
1455   .. availability:: Linux kernel >= 2.6.17 and glibc >= 2.5
1456
1457   .. versionadded:: 3.10
1458
1459
1460.. data:: SPLICE_F_MOVE
1461          SPLICE_F_NONBLOCK
1462          SPLICE_F_MORE
1463
1464   .. versionadded:: 3.10
1465
1466.. function:: readv(fd, buffers)
1467
1468   Read from a file descriptor *fd* into a number of mutable :term:`bytes-like
1469   objects <bytes-like object>` *buffers*. Transfer data into each buffer until
1470   it is full and then move on to the next buffer in the sequence to hold the
1471   rest of the data.
1472
1473   Return the total number of bytes actually read which can be less than the
1474   total capacity of all the objects.
1475
1476   The operating system may set a limit (:func:`sysconf` value
1477   ``'SC_IOV_MAX'``) on the number of buffers that can be used.
1478
1479   .. availability:: Unix.
1480
1481   .. versionadded:: 3.3
1482
1483
1484.. function:: tcgetpgrp(fd)
1485
1486   Return the process group associated with the terminal given by *fd* (an open
1487   file descriptor as returned by :func:`os.open`).
1488
1489   .. availability:: Unix.
1490
1491
1492.. function:: tcsetpgrp(fd, pg)
1493
1494   Set the process group associated with the terminal given by *fd* (an open file
1495   descriptor as returned by :func:`os.open`) to *pg*.
1496
1497   .. availability:: Unix.
1498
1499
1500.. function:: ttyname(fd)
1501
1502   Return a string which specifies the terminal device associated with
1503   file descriptor *fd*.  If *fd* is not associated with a terminal device, an
1504   exception is raised.
1505
1506   .. availability:: Unix.
1507
1508
1509.. function:: write(fd, str)
1510
1511   Write the bytestring in *str* to file descriptor *fd*.
1512
1513   Return the number of bytes actually written.
1514
1515   .. note::
1516
1517      This function is intended for low-level I/O and must be applied to a file
1518      descriptor as returned by :func:`os.open` or :func:`pipe`.  To write a "file
1519      object" returned by the built-in function :func:`open` or by :func:`popen` or
1520      :func:`fdopen`, or :data:`sys.stdout` or :data:`sys.stderr`, use its
1521      :meth:`~file.write` method.
1522
1523   .. versionchanged:: 3.5
1524      If the system call is interrupted and the signal handler does not raise an
1525      exception, the function now retries the system call instead of raising an
1526      :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
1527
1528
1529.. function:: writev(fd, buffers)
1530
1531   Write the contents of *buffers* to file descriptor *fd*. *buffers* must be
1532   a sequence of :term:`bytes-like objects <bytes-like object>`. Buffers are
1533   processed in array order. Entire contents of the first buffer is written
1534   before proceeding to the second, and so on.
1535
1536   Returns the total number of bytes actually written.
1537
1538   The operating system may set a limit (:func:`sysconf` value
1539   ``'SC_IOV_MAX'``) on the number of buffers that can be used.
1540
1541   .. availability:: Unix.
1542
1543   .. versionadded:: 3.3
1544
1545
1546.. _terminal-size:
1547
1548Querying the size of a terminal
1549~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1550
1551.. versionadded:: 3.3
1552
1553.. function:: get_terminal_size(fd=STDOUT_FILENO)
1554
1555   Return the size of the terminal window as ``(columns, lines)``,
1556   tuple of type :class:`terminal_size`.
1557
1558   The optional argument ``fd`` (default ``STDOUT_FILENO``, or standard
1559   output) specifies which file descriptor should be queried.
1560
1561   If the file descriptor is not connected to a terminal, an :exc:`OSError`
1562   is raised.
1563
1564   :func:`shutil.get_terminal_size` is the high-level function which
1565   should normally be used, ``os.get_terminal_size`` is the low-level
1566   implementation.
1567
1568   .. availability:: Unix, Windows.
1569
1570.. class:: terminal_size
1571
1572   A subclass of tuple, holding ``(columns, lines)`` of the terminal window size.
1573
1574   .. attribute:: columns
1575
1576      Width of the terminal window in characters.
1577
1578   .. attribute:: lines
1579
1580      Height of the terminal window in characters.
1581
1582
1583.. _fd_inheritance:
1584
1585Inheritance of File Descriptors
1586~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1587
1588.. versionadded:: 3.4
1589
1590A file descriptor has an "inheritable" flag which indicates if the file descriptor
1591can be inherited by child processes.  Since Python 3.4, file descriptors
1592created by Python are non-inheritable by default.
1593
1594On UNIX, non-inheritable file descriptors are closed in child processes at the
1595execution of a new program, other file descriptors are inherited.
1596
1597On Windows, non-inheritable handles and file descriptors are closed in child
1598processes, except for standard streams (file descriptors 0, 1 and 2: stdin, stdout
1599and stderr), which are always inherited.  Using :func:`spawn\* <spawnl>` functions,
1600all inheritable handles and all inheritable file descriptors are inherited.
1601Using the :mod:`subprocess` module, all file descriptors except standard
1602streams are closed, and inheritable handles are only inherited if the
1603*close_fds* parameter is ``False``.
1604
1605.. function:: get_inheritable(fd)
1606
1607   Get the "inheritable" flag of the specified file descriptor (a boolean).
1608
1609.. function:: set_inheritable(fd, inheritable)
1610
1611   Set the "inheritable" flag of the specified file descriptor.
1612
1613.. function:: get_handle_inheritable(handle)
1614
1615   Get the "inheritable" flag of the specified handle (a boolean).
1616
1617   .. availability:: Windows.
1618
1619.. function:: set_handle_inheritable(handle, inheritable)
1620
1621   Set the "inheritable" flag of the specified handle.
1622
1623   .. availability:: Windows.
1624
1625
1626.. _os-file-dir:
1627
1628Files and Directories
1629---------------------
1630
1631On some Unix platforms, many of these functions support one or more of these
1632features:
1633
1634.. _path_fd:
1635
1636* **specifying a file descriptor:**
1637  Normally the *path* argument provided to functions in the :mod:`os` module
1638  must be a string specifying a file path.  However, some functions now
1639  alternatively accept an open file descriptor for their *path* argument.
1640  The function will then operate on the file referred to by the descriptor.
1641  (For POSIX systems, Python will call the variant of the function prefixed
1642  with ``f`` (e.g. call ``fchdir`` instead of ``chdir``).)
1643
1644  You can check whether or not *path* can be specified as a file descriptor
1645  for a particular function on your platform using :data:`os.supports_fd`.
1646  If this functionality is unavailable, using it will raise a
1647  :exc:`NotImplementedError`.
1648
1649  If the function also supports *dir_fd* or *follow_symlinks* arguments, it's
1650  an error to specify one of those when supplying *path* as a file descriptor.
1651
1652.. _dir_fd:
1653
1654* **paths relative to directory descriptors:** If *dir_fd* is not ``None``, it
1655  should be a file descriptor referring to a directory, and the path to operate
1656  on should be relative; path will then be relative to that directory.  If the
1657  path is absolute, *dir_fd* is ignored.  (For POSIX systems, Python will call
1658  the variant of the function with an ``at`` suffix and possibly prefixed with
1659  ``f`` (e.g. call ``faccessat`` instead of ``access``).
1660
1661  You can check whether or not *dir_fd* is supported for a particular function
1662  on your platform using :data:`os.supports_dir_fd`.  If it's unavailable,
1663  using it will raise a :exc:`NotImplementedError`.
1664
1665.. _follow_symlinks:
1666
1667* **not following symlinks:** If *follow_symlinks* is
1668  ``False``, and the last element of the path to operate on is a symbolic link,
1669  the function will operate on the symbolic link itself rather than the file
1670  pointed to by the link.  (For POSIX systems, Python will call the ``l...``
1671  variant of the function.)
1672
1673  You can check whether or not *follow_symlinks* is supported for a particular
1674  function on your platform using :data:`os.supports_follow_symlinks`.
1675  If it's unavailable, using it will raise a :exc:`NotImplementedError`.
1676
1677
1678
1679.. function:: access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)
1680
1681   Use the real uid/gid to test for access to *path*.  Note that most operations
1682   will use the effective uid/gid, therefore this routine can be used in a
1683   suid/sgid environment to test if the invoking user has the specified access to
1684   *path*.  *mode* should be :const:`F_OK` to test the existence of *path*, or it
1685   can be the inclusive OR of one or more of :const:`R_OK`, :const:`W_OK`, and
1686   :const:`X_OK` to test permissions.  Return :const:`True` if access is allowed,
1687   :const:`False` if not. See the Unix man page :manpage:`access(2)` for more
1688   information.
1689
1690   This function can support specifying :ref:`paths relative to directory
1691   descriptors <dir_fd>` and :ref:`not following symlinks <follow_symlinks>`.
1692
1693   If *effective_ids* is ``True``, :func:`access` will perform its access
1694   checks using the effective uid/gid instead of the real uid/gid.
1695   *effective_ids* may not be supported on your platform; you can check whether
1696   or not it is available using :data:`os.supports_effective_ids`.  If it is
1697   unavailable, using it will raise a :exc:`NotImplementedError`.
1698
1699   .. note::
1700
1701      Using :func:`access` to check if a user is authorized to e.g. open a file
1702      before actually doing so using :func:`open` creates a security hole,
1703      because the user might exploit the short time interval between checking
1704      and opening the file to manipulate it. It's preferable to use :term:`EAFP`
1705      techniques. For example::
1706
1707         if os.access("myfile", os.R_OK):
1708             with open("myfile") as fp:
1709                 return fp.read()
1710         return "some default data"
1711
1712      is better written as::
1713
1714         try:
1715             fp = open("myfile")
1716         except PermissionError:
1717             return "some default data"
1718         else:
1719             with fp:
1720                 return fp.read()
1721
1722   .. note::
1723
1724      I/O operations may fail even when :func:`access` indicates that they would
1725      succeed, particularly for operations on network filesystems which may have
1726      permissions semantics beyond the usual POSIX permission-bit model.
1727
1728   .. versionchanged:: 3.3
1729      Added the *dir_fd*, *effective_ids*, and *follow_symlinks* parameters.
1730
1731   .. versionchanged:: 3.6
1732      Accepts a :term:`path-like object`.
1733
1734
1735.. data:: F_OK
1736          R_OK
1737          W_OK
1738          X_OK
1739
1740   Values to pass as the *mode* parameter of :func:`access` to test the
1741   existence, readability, writability and executability of *path*,
1742   respectively.
1743
1744
1745.. function:: chdir(path)
1746
1747   .. index:: single: directory; changing
1748
1749   Change the current working directory to *path*.
1750
1751   This function can support :ref:`specifying a file descriptor <path_fd>`.  The
1752   descriptor must refer to an opened directory, not an open file.
1753
1754   This function can raise :exc:`OSError` and subclasses such as
1755   :exc:`FileNotFoundError`, :exc:`PermissionError`, and :exc:`NotADirectoryError`.
1756
1757   .. audit-event:: os.chdir path os.chdir
1758
1759   .. versionadded:: 3.3
1760      Added support for specifying *path* as a file descriptor
1761      on some platforms.
1762
1763   .. versionchanged:: 3.6
1764      Accepts a :term:`path-like object`.
1765
1766
1767.. function:: chflags(path, flags, *, follow_symlinks=True)
1768
1769   Set the flags of *path* to the numeric *flags*. *flags* may take a combination
1770   (bitwise OR) of the following values (as defined in the :mod:`stat` module):
1771
1772   * :data:`stat.UF_NODUMP`
1773   * :data:`stat.UF_IMMUTABLE`
1774   * :data:`stat.UF_APPEND`
1775   * :data:`stat.UF_OPAQUE`
1776   * :data:`stat.UF_NOUNLINK`
1777   * :data:`stat.UF_COMPRESSED`
1778   * :data:`stat.UF_HIDDEN`
1779   * :data:`stat.SF_ARCHIVED`
1780   * :data:`stat.SF_IMMUTABLE`
1781   * :data:`stat.SF_APPEND`
1782   * :data:`stat.SF_NOUNLINK`
1783   * :data:`stat.SF_SNAPSHOT`
1784
1785   This function can support :ref:`not following symlinks <follow_symlinks>`.
1786
1787   .. audit-event:: os.chflags path,flags os.chflags
1788
1789   .. availability:: Unix.
1790
1791   .. versionadded:: 3.3
1792      The *follow_symlinks* argument.
1793
1794   .. versionchanged:: 3.6
1795      Accepts a :term:`path-like object`.
1796
1797
1798.. function:: chmod(path, mode, *, dir_fd=None, follow_symlinks=True)
1799
1800   Change the mode of *path* to the numeric *mode*. *mode* may take one of the
1801   following values (as defined in the :mod:`stat` module) or bitwise ORed
1802   combinations of them:
1803
1804   * :data:`stat.S_ISUID`
1805   * :data:`stat.S_ISGID`
1806   * :data:`stat.S_ENFMT`
1807   * :data:`stat.S_ISVTX`
1808   * :data:`stat.S_IREAD`
1809   * :data:`stat.S_IWRITE`
1810   * :data:`stat.S_IEXEC`
1811   * :data:`stat.S_IRWXU`
1812   * :data:`stat.S_IRUSR`
1813   * :data:`stat.S_IWUSR`
1814   * :data:`stat.S_IXUSR`
1815   * :data:`stat.S_IRWXG`
1816   * :data:`stat.S_IRGRP`
1817   * :data:`stat.S_IWGRP`
1818   * :data:`stat.S_IXGRP`
1819   * :data:`stat.S_IRWXO`
1820   * :data:`stat.S_IROTH`
1821   * :data:`stat.S_IWOTH`
1822   * :data:`stat.S_IXOTH`
1823
1824   This function can support :ref:`specifying a file descriptor <path_fd>`,
1825   :ref:`paths relative to directory descriptors <dir_fd>` and :ref:`not
1826   following symlinks <follow_symlinks>`.
1827
1828   .. note::
1829
1830      Although Windows supports :func:`chmod`, you can only set the file's
1831      read-only flag with it (via the ``stat.S_IWRITE`` and ``stat.S_IREAD``
1832      constants or a corresponding integer value).  All other bits are ignored.
1833
1834   .. audit-event:: os.chmod path,mode,dir_fd os.chmod
1835
1836   .. versionadded:: 3.3
1837      Added support for specifying *path* as an open file descriptor,
1838      and the *dir_fd* and *follow_symlinks* arguments.
1839
1840   .. versionchanged:: 3.6
1841      Accepts a :term:`path-like object`.
1842
1843
1844.. function:: chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True)
1845
1846   Change the owner and group id of *path* to the numeric *uid* and *gid*.  To
1847   leave one of the ids unchanged, set it to -1.
1848
1849   This function can support :ref:`specifying a file descriptor <path_fd>`,
1850   :ref:`paths relative to directory descriptors <dir_fd>` and :ref:`not
1851   following symlinks <follow_symlinks>`.
1852
1853   See :func:`shutil.chown` for a higher-level function that accepts names in
1854   addition to numeric ids.
1855
1856   .. audit-event:: os.chown path,uid,gid,dir_fd os.chown
1857
1858   .. availability:: Unix.
1859
1860   .. versionadded:: 3.3
1861      Added support for specifying *path* as an open file descriptor,
1862      and the *dir_fd* and *follow_symlinks* arguments.
1863
1864   .. versionchanged:: 3.6
1865      Supports a :term:`path-like object`.
1866
1867
1868.. function:: chroot(path)
1869
1870   Change the root directory of the current process to *path*.
1871
1872   .. availability:: Unix.
1873
1874   .. versionchanged:: 3.6
1875      Accepts a :term:`path-like object`.
1876
1877
1878.. function:: fchdir(fd)
1879
1880   Change the current working directory to the directory represented by the file
1881   descriptor *fd*.  The descriptor must refer to an opened directory, not an
1882   open file.  As of Python 3.3, this is equivalent to ``os.chdir(fd)``.
1883
1884   .. audit-event:: os.chdir path os.fchdir
1885
1886   .. availability:: Unix.
1887
1888
1889.. function:: getcwd()
1890
1891   Return a string representing the current working directory.
1892
1893
1894.. function:: getcwdb()
1895
1896   Return a bytestring representing the current working directory.
1897
1898   .. versionchanged:: 3.8
1899      The function now uses the UTF-8 encoding on Windows, rather than the ANSI
1900      code page: see :pep:`529` for the rationale. The function is no longer
1901      deprecated on Windows.
1902
1903
1904.. function:: lchflags(path, flags)
1905
1906   Set the flags of *path* to the numeric *flags*, like :func:`chflags`, but do
1907   not follow symbolic links.  As of Python 3.3, this is equivalent to
1908   ``os.chflags(path, flags, follow_symlinks=False)``.
1909
1910   .. audit-event:: os.chflags path,flags os.lchflags
1911
1912   .. availability:: Unix.
1913
1914   .. versionchanged:: 3.6
1915      Accepts a :term:`path-like object`.
1916
1917
1918.. function:: lchmod(path, mode)
1919
1920   Change the mode of *path* to the numeric *mode*. If path is a symlink, this
1921   affects the symlink rather than the target.  See the docs for :func:`chmod`
1922   for possible values of *mode*.  As of Python 3.3, this is equivalent to
1923   ``os.chmod(path, mode, follow_symlinks=False)``.
1924
1925   .. audit-event:: os.chmod path,mode,dir_fd os.lchmod
1926
1927   .. availability:: Unix.
1928
1929   .. versionchanged:: 3.6
1930      Accepts a :term:`path-like object`.
1931
1932.. function:: lchown(path, uid, gid)
1933
1934   Change the owner and group id of *path* to the numeric *uid* and *gid*.  This
1935   function will not follow symbolic links.  As of Python 3.3, this is equivalent
1936   to ``os.chown(path, uid, gid, follow_symlinks=False)``.
1937
1938   .. audit-event:: os.chown path,uid,gid,dir_fd os.lchown
1939
1940   .. availability:: Unix.
1941
1942   .. versionchanged:: 3.6
1943      Accepts a :term:`path-like object`.
1944
1945
1946.. function:: link(src, dst, *, src_dir_fd=None, dst_dir_fd=None, follow_symlinks=True)
1947
1948   Create a hard link pointing to *src* named *dst*.
1949
1950   This function can support specifying *src_dir_fd* and/or *dst_dir_fd* to
1951   supply :ref:`paths relative to directory descriptors <dir_fd>`, and :ref:`not
1952   following symlinks <follow_symlinks>`.
1953
1954   .. audit-event:: os.link src,dst,src_dir_fd,dst_dir_fd os.link
1955
1956   .. availability:: Unix, Windows.
1957
1958   .. versionchanged:: 3.2
1959      Added Windows support.
1960
1961   .. versionadded:: 3.3
1962      Added the *src_dir_fd*, *dst_dir_fd*, and *follow_symlinks* arguments.
1963
1964   .. versionchanged:: 3.6
1965      Accepts a :term:`path-like object` for *src* and *dst*.
1966
1967
1968.. function:: listdir(path='.')
1969
1970   Return a list containing the names of the entries in the directory given by
1971   *path*.  The list is in arbitrary order, and does not include the special
1972   entries ``'.'`` and ``'..'`` even if they are present in the directory.
1973   If a file is removed from or added to the directory during the call of
1974   this function, whether a name for that file be included is unspecified.
1975
1976   *path* may be a :term:`path-like object`.  If *path* is of type ``bytes``
1977   (directly or indirectly through the :class:`PathLike` interface),
1978   the filenames returned will also be of type ``bytes``;
1979   in all other circumstances, they will be of type ``str``.
1980
1981   This function can also support :ref:`specifying a file descriptor
1982   <path_fd>`; the file descriptor must refer to a directory.
1983
1984   .. audit-event:: os.listdir path os.listdir
1985
1986   .. note::
1987      To encode ``str`` filenames to ``bytes``, use :func:`~os.fsencode`.
1988
1989   .. seealso::
1990
1991      The :func:`scandir` function returns directory entries along with
1992      file attribute information, giving better performance for many
1993      common use cases.
1994
1995   .. versionchanged:: 3.2
1996      The *path* parameter became optional.
1997
1998   .. versionadded:: 3.3
1999      Added support for specifying *path* as an open file descriptor.
2000
2001   .. versionchanged:: 3.6
2002      Accepts a :term:`path-like object`.
2003
2004
2005.. function:: lstat(path, *, dir_fd=None)
2006
2007   Perform the equivalent of an :c:func:`lstat` system call on the given path.
2008   Similar to :func:`~os.stat`, but does not follow symbolic links. Return a
2009   :class:`stat_result` object.
2010
2011   On platforms that do not support symbolic links, this is an alias for
2012   :func:`~os.stat`.
2013
2014   As of Python 3.3, this is equivalent to ``os.stat(path, dir_fd=dir_fd,
2015   follow_symlinks=False)``.
2016
2017   This function can also support :ref:`paths relative to directory descriptors
2018   <dir_fd>`.
2019
2020   .. seealso::
2021
2022      The :func:`.stat` function.
2023
2024   .. versionchanged:: 3.2
2025      Added support for Windows 6.0 (Vista) symbolic links.
2026
2027   .. versionchanged:: 3.3
2028      Added the *dir_fd* parameter.
2029
2030   .. versionchanged:: 3.6
2031      Accepts a :term:`path-like object`.
2032
2033   .. versionchanged:: 3.8
2034      On Windows, now opens reparse points that represent another path
2035      (name surrogates), including symbolic links and directory junctions.
2036      Other kinds of reparse points are resolved by the operating system as
2037      for :func:`~os.stat`.
2038
2039
2040.. function:: mkdir(path, mode=0o777, *, dir_fd=None)
2041
2042   Create a directory named *path* with numeric mode *mode*.
2043
2044   If the directory already exists, :exc:`FileExistsError` is raised.
2045
2046   .. _mkdir_modebits:
2047
2048   On some systems, *mode* is ignored.  Where it is used, the current umask
2049   value is first masked out.  If bits other than the last 9 (i.e. the last 3
2050   digits of the octal representation of the *mode*) are set, their meaning is
2051   platform-dependent.  On some platforms, they are ignored and you should call
2052   :func:`chmod` explicitly to set them.
2053
2054   This function can also support :ref:`paths relative to directory descriptors
2055   <dir_fd>`.
2056
2057   It is also possible to create temporary directories; see the
2058   :mod:`tempfile` module's :func:`tempfile.mkdtemp` function.
2059
2060   .. audit-event:: os.mkdir path,mode,dir_fd os.mkdir
2061
2062   .. versionadded:: 3.3
2063      The *dir_fd* argument.
2064
2065   .. versionchanged:: 3.6
2066      Accepts a :term:`path-like object`.
2067
2068
2069.. function:: makedirs(name, mode=0o777, exist_ok=False)
2070
2071   .. index::
2072      single: directory; creating
2073      single: UNC paths; and os.makedirs()
2074
2075   Recursive directory creation function.  Like :func:`mkdir`, but makes all
2076   intermediate-level directories needed to contain the leaf directory.
2077
2078   The *mode* parameter is passed to :func:`mkdir` for creating the leaf
2079   directory; see :ref:`the mkdir() description <mkdir_modebits>` for how it
2080   is interpreted.  To set the file permission bits of any newly-created parent
2081   directories you can set the umask before invoking :func:`makedirs`.  The
2082   file permission bits of existing parent directories are not changed.
2083
2084   If *exist_ok* is ``False`` (the default), an :exc:`FileExistsError` is
2085   raised if the target directory already exists.
2086
2087   .. note::
2088
2089      :func:`makedirs` will become confused if the path elements to create
2090      include :data:`pardir` (eg. ".." on UNIX systems).
2091
2092   This function handles UNC paths correctly.
2093
2094   .. audit-event:: os.mkdir path,mode,dir_fd os.makedirs
2095
2096   .. versionadded:: 3.2
2097      The *exist_ok* parameter.
2098
2099   .. versionchanged:: 3.4.1
2100
2101      Before Python 3.4.1, if *exist_ok* was ``True`` and the directory existed,
2102      :func:`makedirs` would still raise an error if *mode* did not match the
2103      mode of the existing directory. Since this behavior was impossible to
2104      implement safely, it was removed in Python 3.4.1. See :issue:`21082`.
2105
2106   .. versionchanged:: 3.6
2107      Accepts a :term:`path-like object`.
2108
2109   .. versionchanged:: 3.7
2110      The *mode* argument no longer affects the file permission bits of
2111      newly-created intermediate-level directories.
2112
2113
2114.. function:: mkfifo(path, mode=0o666, *, dir_fd=None)
2115
2116   Create a FIFO (a named pipe) named *path* with numeric mode *mode*.
2117   The current umask value is first masked out from the mode.
2118
2119   This function can also support :ref:`paths relative to directory descriptors
2120   <dir_fd>`.
2121
2122   FIFOs are pipes that can be accessed like regular files.  FIFOs exist until they
2123   are deleted (for example with :func:`os.unlink`). Generally, FIFOs are used as
2124   rendezvous between "client" and "server" type processes: the server opens the
2125   FIFO for reading, and the client opens it for writing.  Note that :func:`mkfifo`
2126   doesn't open the FIFO --- it just creates the rendezvous point.
2127
2128   .. availability:: Unix.
2129
2130   .. versionadded:: 3.3
2131      The *dir_fd* argument.
2132
2133   .. versionchanged:: 3.6
2134      Accepts a :term:`path-like object`.
2135
2136
2137.. function:: mknod(path, mode=0o600, device=0, *, dir_fd=None)
2138
2139   Create a filesystem node (file, device special file or named pipe) named
2140   *path*. *mode* specifies both the permissions to use and the type of node
2141   to be created, being combined (bitwise OR) with one of ``stat.S_IFREG``,
2142   ``stat.S_IFCHR``, ``stat.S_IFBLK``, and ``stat.S_IFIFO`` (those constants are
2143   available in :mod:`stat`).  For ``stat.S_IFCHR`` and ``stat.S_IFBLK``,
2144   *device* defines the newly created device special file (probably using
2145   :func:`os.makedev`), otherwise it is ignored.
2146
2147   This function can also support :ref:`paths relative to directory descriptors
2148   <dir_fd>`.
2149
2150   .. availability:: Unix.
2151
2152   .. versionadded:: 3.3
2153      The *dir_fd* argument.
2154
2155   .. versionchanged:: 3.6
2156      Accepts a :term:`path-like object`.
2157
2158
2159.. function:: major(device)
2160
2161   Extract the device major number from a raw device number (usually the
2162   :attr:`st_dev` or :attr:`st_rdev` field from :c:type:`stat`).
2163
2164
2165.. function:: minor(device)
2166
2167   Extract the device minor number from a raw device number (usually the
2168   :attr:`st_dev` or :attr:`st_rdev` field from :c:type:`stat`).
2169
2170
2171.. function:: makedev(major, minor)
2172
2173   Compose a raw device number from the major and minor device numbers.
2174
2175
2176.. function:: pathconf(path, name)
2177
2178   Return system configuration information relevant to a named file. *name*
2179   specifies the configuration value to retrieve; it may be a string which is the
2180   name of a defined system value; these names are specified in a number of
2181   standards (POSIX.1, Unix 95, Unix 98, and others).  Some platforms define
2182   additional names as well.  The names known to the host operating system are
2183   given in the ``pathconf_names`` dictionary.  For configuration variables not
2184   included in that mapping, passing an integer for *name* is also accepted.
2185
2186   If *name* is a string and is not known, :exc:`ValueError` is raised.  If a
2187   specific value for *name* is not supported by the host system, even if it is
2188   included in ``pathconf_names``, an :exc:`OSError` is raised with
2189   :const:`errno.EINVAL` for the error number.
2190
2191   This function can support :ref:`specifying a file descriptor
2192   <path_fd>`.
2193
2194   .. availability:: Unix.
2195
2196   .. versionchanged:: 3.6
2197      Accepts a :term:`path-like object`.
2198
2199
2200.. data:: pathconf_names
2201
2202   Dictionary mapping names accepted by :func:`pathconf` and :func:`fpathconf` to
2203   the integer values defined for those names by the host operating system.  This
2204   can be used to determine the set of names known to the system.
2205
2206   .. availability:: Unix.
2207
2208
2209.. function:: readlink(path, *, dir_fd=None)
2210
2211   Return a string representing the path to which the symbolic link points.  The
2212   result may be either an absolute or relative pathname; if it is relative, it
2213   may be converted to an absolute pathname using
2214   ``os.path.join(os.path.dirname(path), result)``.
2215
2216   If the *path* is a string object (directly or indirectly through a
2217   :class:`PathLike` interface), the result will also be a string object,
2218   and the call may raise a UnicodeDecodeError. If the *path* is a bytes
2219   object (direct or indirectly), the result will be a bytes object.
2220
2221   This function can also support :ref:`paths relative to directory descriptors
2222   <dir_fd>`.
2223
2224   When trying to resolve a path that may contain links, use
2225   :func:`~os.path.realpath` to properly handle recursion and platform
2226   differences.
2227
2228   .. availability:: Unix, Windows.
2229
2230   .. versionchanged:: 3.2
2231      Added support for Windows 6.0 (Vista) symbolic links.
2232
2233   .. versionadded:: 3.3
2234      The *dir_fd* argument.
2235
2236   .. versionchanged:: 3.6
2237      Accepts a :term:`path-like object` on Unix.
2238
2239   .. versionchanged:: 3.8
2240      Accepts a :term:`path-like object` and a bytes object on Windows.
2241
2242   .. versionchanged:: 3.8
2243      Added support for directory junctions, and changed to return the
2244      substitution path (which typically includes ``\\?\`` prefix) rather
2245      than the optional "print name" field that was previously returned.
2246
2247.. function:: remove(path, *, dir_fd=None)
2248
2249   Remove (delete) the file *path*.  If *path* is a directory, an
2250   :exc:`IsADirectoryError` is raised.  Use :func:`rmdir` to remove directories.
2251   If the file does not exist, a :exc:`FileNotFoundError` is raised.
2252
2253   This function can support :ref:`paths relative to directory descriptors
2254   <dir_fd>`.
2255
2256   On Windows, attempting to remove a file that is in use causes an exception to
2257   be raised; on Unix, the directory entry is removed but the storage allocated
2258   to the file is not made available until the original file is no longer in use.
2259
2260   This function is semantically identical to :func:`unlink`.
2261
2262   .. audit-event:: os.remove path,dir_fd os.remove
2263
2264   .. versionadded:: 3.3
2265      The *dir_fd* argument.
2266
2267   .. versionchanged:: 3.6
2268      Accepts a :term:`path-like object`.
2269
2270
2271.. function:: removedirs(name)
2272
2273   .. index:: single: directory; deleting
2274
2275   Remove directories recursively.  Works like :func:`rmdir` except that, if the
2276   leaf directory is successfully removed, :func:`removedirs`  tries to
2277   successively remove every parent directory mentioned in  *path* until an error
2278   is raised (which is ignored, because it generally means that a parent directory
2279   is not empty). For example, ``os.removedirs('foo/bar/baz')`` will first remove
2280   the directory ``'foo/bar/baz'``, and then remove ``'foo/bar'`` and ``'foo'`` if
2281   they are empty. Raises :exc:`OSError` if the leaf directory could not be
2282   successfully removed.
2283
2284   .. audit-event:: os.remove path,dir_fd os.removedirs
2285
2286   .. versionchanged:: 3.6
2287      Accepts a :term:`path-like object`.
2288
2289
2290.. function:: rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
2291
2292   Rename the file or directory *src* to *dst*. If *dst* exists, the operation
2293   will fail with an :exc:`OSError` subclass in a number of cases:
2294
2295   On Windows, if *dst* exists a :exc:`FileExistsError` is always raised.
2296
2297   On Unix, if *src* is a file and *dst* is a directory or vice-versa, an
2298   :exc:`IsADirectoryError` or a :exc:`NotADirectoryError` will be raised
2299   respectively.  If both are directories and *dst* is empty, *dst* will be
2300   silently replaced.  If *dst* is a non-empty directory, an :exc:`OSError`
2301   is raised. If both are files, *dst* it will be replaced silently if the user
2302   has permission.  The operation may fail on some Unix flavors if *src* and
2303   *dst* are on different filesystems.  If successful, the renaming will be an
2304   atomic operation (this is a POSIX requirement).
2305
2306   This function can support specifying *src_dir_fd* and/or *dst_dir_fd* to
2307   supply :ref:`paths relative to directory descriptors <dir_fd>`.
2308
2309   If you want cross-platform overwriting of the destination, use :func:`replace`.
2310
2311   .. audit-event:: os.rename src,dst,src_dir_fd,dst_dir_fd os.rename
2312
2313   .. versionadded:: 3.3
2314      The *src_dir_fd* and *dst_dir_fd* arguments.
2315
2316   .. versionchanged:: 3.6
2317      Accepts a :term:`path-like object` for *src* and *dst*.
2318
2319
2320.. function:: renames(old, new)
2321
2322   Recursive directory or file renaming function. Works like :func:`rename`, except
2323   creation of any intermediate directories needed to make the new pathname good is
2324   attempted first. After the rename, directories corresponding to rightmost path
2325   segments of the old name will be pruned away using :func:`removedirs`.
2326
2327   .. note::
2328
2329      This function can fail with the new directory structure made if you lack
2330      permissions needed to remove the leaf directory or file.
2331
2332   .. audit-event:: os.rename src,dst,src_dir_fd,dst_dir_fd os.renames
2333
2334   .. versionchanged:: 3.6
2335      Accepts a :term:`path-like object` for *old* and *new*.
2336
2337
2338.. function:: replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
2339
2340   Rename the file or directory *src* to *dst*.  If *dst* is a directory,
2341   :exc:`OSError` will be raised.  If *dst* exists and is a file, it will
2342   be replaced silently if the user has permission.  The operation may fail
2343   if *src* and *dst* are on different filesystems.  If successful,
2344   the renaming will be an atomic operation (this is a POSIX requirement).
2345
2346   This function can support specifying *src_dir_fd* and/or *dst_dir_fd* to
2347   supply :ref:`paths relative to directory descriptors <dir_fd>`.
2348
2349   .. audit-event:: os.rename src,dst,src_dir_fd,dst_dir_fd os.replace
2350
2351   .. versionadded:: 3.3
2352
2353   .. versionchanged:: 3.6
2354      Accepts a :term:`path-like object` for *src* and *dst*.
2355
2356
2357.. function:: rmdir(path, *, dir_fd=None)
2358
2359   Remove (delete) the directory *path*.  If the directory does not exist or is
2360   not empty, an :exc:`FileNotFoundError` or an :exc:`OSError` is raised
2361   respectively.  In order to remove whole directory trees,
2362   :func:`shutil.rmtree` can be used.
2363
2364   This function can support :ref:`paths relative to directory descriptors
2365   <dir_fd>`.
2366
2367   .. audit-event:: os.rmdir path,dir_fd os.rmdir
2368
2369   .. versionadded:: 3.3
2370      The *dir_fd* parameter.
2371
2372   .. versionchanged:: 3.6
2373      Accepts a :term:`path-like object`.
2374
2375
2376.. function:: scandir(path='.')
2377
2378   Return an iterator of :class:`os.DirEntry` objects corresponding to the
2379   entries in the directory given by *path*. The entries are yielded in
2380   arbitrary order, and the special entries ``'.'`` and ``'..'`` are not
2381   included.  If a file is removed from or added to the directory after
2382   creating the iterator, whether an entry for that file be included is
2383   unspecified.
2384
2385   Using :func:`scandir` instead of :func:`listdir` can significantly
2386   increase the performance of code that also needs file type or file
2387   attribute information, because :class:`os.DirEntry` objects expose this
2388   information if the operating system provides it when scanning a directory.
2389   All :class:`os.DirEntry` methods may perform a system call, but
2390   :func:`~os.DirEntry.is_dir` and :func:`~os.DirEntry.is_file` usually only
2391   require a system call for symbolic links; :func:`os.DirEntry.stat`
2392   always requires a system call on Unix but only requires one for
2393   symbolic links on Windows.
2394
2395   *path* may be a :term:`path-like object`.  If *path* is of type ``bytes``
2396   (directly or indirectly through the :class:`PathLike` interface),
2397   the type of the :attr:`~os.DirEntry.name` and :attr:`~os.DirEntry.path`
2398   attributes of each :class:`os.DirEntry` will be ``bytes``; in all other
2399   circumstances, they will be of type ``str``.
2400
2401   This function can also support :ref:`specifying a file descriptor
2402   <path_fd>`; the file descriptor must refer to a directory.
2403
2404   .. audit-event:: os.scandir path os.scandir
2405
2406   The :func:`scandir` iterator supports the :term:`context manager` protocol
2407   and has the following method:
2408
2409   .. method:: scandir.close()
2410
2411      Close the iterator and free acquired resources.
2412
2413      This is called automatically when the iterator is exhausted or garbage
2414      collected, or when an error happens during iterating.  However it
2415      is advisable to call it explicitly or use the :keyword:`with`
2416      statement.
2417
2418      .. versionadded:: 3.6
2419
2420   The following example shows a simple use of :func:`scandir` to display all
2421   the files (excluding directories) in the given *path* that don't start with
2422   ``'.'``. The ``entry.is_file()`` call will generally not make an additional
2423   system call::
2424
2425      with os.scandir(path) as it:
2426          for entry in it:
2427              if not entry.name.startswith('.') and entry.is_file():
2428                  print(entry.name)
2429
2430   .. note::
2431
2432      On Unix-based systems, :func:`scandir` uses the system's
2433      `opendir() <http://pubs.opengroup.org/onlinepubs/009695399/functions/opendir.html>`_
2434      and
2435      `readdir() <http://pubs.opengroup.org/onlinepubs/009695399/functions/readdir_r.html>`_
2436      functions. On Windows, it uses the Win32
2437      `FindFirstFileW <https://msdn.microsoft.com/en-us/library/windows/desktop/aa364418(v=vs.85).aspx>`_
2438      and
2439      `FindNextFileW <https://msdn.microsoft.com/en-us/library/windows/desktop/aa364428(v=vs.85).aspx>`_
2440      functions.
2441
2442   .. versionadded:: 3.5
2443
2444   .. versionadded:: 3.6
2445      Added support for the :term:`context manager` protocol and the
2446      :func:`~scandir.close()` method.  If a :func:`scandir` iterator is neither
2447      exhausted nor explicitly closed a :exc:`ResourceWarning` will be emitted
2448      in its destructor.
2449
2450      The function accepts a :term:`path-like object`.
2451
2452   .. versionchanged:: 3.7
2453      Added support for :ref:`file descriptors <path_fd>` on Unix.
2454
2455
2456.. class:: DirEntry
2457
2458   Object yielded by :func:`scandir` to expose the file path and other file
2459   attributes of a directory entry.
2460
2461   :func:`scandir` will provide as much of this information as possible without
2462   making additional system calls. When a ``stat()`` or ``lstat()`` system call
2463   is made, the ``os.DirEntry`` object will cache the result.
2464
2465   ``os.DirEntry`` instances are not intended to be stored in long-lived data
2466   structures; if you know the file metadata has changed or if a long time has
2467   elapsed since calling :func:`scandir`, call ``os.stat(entry.path)`` to fetch
2468   up-to-date information.
2469
2470   Because the ``os.DirEntry`` methods can make operating system calls, they may
2471   also raise :exc:`OSError`. If you need very fine-grained
2472   control over errors, you can catch :exc:`OSError` when calling one of the
2473   ``os.DirEntry`` methods and handle as appropriate.
2474
2475   To be directly usable as a :term:`path-like object`, ``os.DirEntry``
2476   implements the :class:`PathLike` interface.
2477
2478   Attributes and methods on a ``os.DirEntry`` instance are as follows:
2479
2480   .. attribute:: name
2481
2482      The entry's base filename, relative to the :func:`scandir` *path*
2483      argument.
2484
2485      The :attr:`name` attribute will be ``bytes`` if the :func:`scandir`
2486      *path* argument is of type ``bytes`` and ``str`` otherwise.  Use
2487      :func:`~os.fsdecode` to decode byte filenames.
2488
2489   .. attribute:: path
2490
2491      The entry's full path name: equivalent to ``os.path.join(scandir_path,
2492      entry.name)`` where *scandir_path* is the :func:`scandir` *path*
2493      argument.  The path is only absolute if the :func:`scandir` *path*
2494      argument was absolute.  If the :func:`scandir` *path*
2495      argument was a :ref:`file descriptor <path_fd>`, the :attr:`path`
2496      attribute is the same as the :attr:`name` attribute.
2497
2498      The :attr:`path` attribute will be ``bytes`` if the :func:`scandir`
2499      *path* argument is of type ``bytes`` and ``str`` otherwise.  Use
2500      :func:`~os.fsdecode` to decode byte filenames.
2501
2502   .. method:: inode()
2503
2504      Return the inode number of the entry.
2505
2506      The result is cached on the ``os.DirEntry`` object. Use
2507      ``os.stat(entry.path, follow_symlinks=False).st_ino`` to fetch up-to-date
2508      information.
2509
2510      On the first, uncached call, a system call is required on Windows but
2511      not on Unix.
2512
2513   .. method:: is_dir(*, follow_symlinks=True)
2514
2515      Return ``True`` if this entry is a directory or a symbolic link pointing
2516      to a directory; return ``False`` if the entry is or points to any other
2517      kind of file, or if it doesn't exist anymore.
2518
2519      If *follow_symlinks* is ``False``, return ``True`` only if this entry
2520      is a directory (without following symlinks); return ``False`` if the
2521      entry is any other kind of file or if it doesn't exist anymore.
2522
2523      The result is cached on the ``os.DirEntry`` object, with a separate cache
2524      for *follow_symlinks* ``True`` and ``False``. Call :func:`os.stat` along
2525      with :func:`stat.S_ISDIR` to fetch up-to-date information.
2526
2527      On the first, uncached call, no system call is required in most cases.
2528      Specifically, for non-symlinks, neither Windows or Unix require a system
2529      call, except on certain Unix file systems, such as network file systems,
2530      that return ``dirent.d_type == DT_UNKNOWN``. If the entry is a symlink,
2531      a system call will be required to follow the symlink unless
2532      *follow_symlinks* is ``False``.
2533
2534      This method can raise :exc:`OSError`, such as :exc:`PermissionError`,
2535      but :exc:`FileNotFoundError` is caught and not raised.
2536
2537   .. method:: is_file(*, follow_symlinks=True)
2538
2539      Return ``True`` if this entry is a file or a symbolic link pointing to a
2540      file; return ``False`` if the entry is or points to a directory or other
2541      non-file entry, or if it doesn't exist anymore.
2542
2543      If *follow_symlinks* is ``False``, return ``True`` only if this entry
2544      is a file (without following symlinks); return ``False`` if the entry is
2545      a directory or other non-file entry, or if it doesn't exist anymore.
2546
2547      The result is cached on the ``os.DirEntry`` object. Caching, system calls
2548      made, and exceptions raised are as per :func:`~os.DirEntry.is_dir`.
2549
2550   .. method:: is_symlink()
2551
2552      Return ``True`` if this entry is a symbolic link (even if broken);
2553      return ``False`` if the entry points to a directory or any kind of file,
2554      or if it doesn't exist anymore.
2555
2556      The result is cached on the ``os.DirEntry`` object. Call
2557      :func:`os.path.islink` to fetch up-to-date information.
2558
2559      On the first, uncached call, no system call is required in most cases.
2560      Specifically, neither Windows or Unix require a system call, except on
2561      certain Unix file systems, such as network file systems, that return
2562      ``dirent.d_type == DT_UNKNOWN``.
2563
2564      This method can raise :exc:`OSError`, such as :exc:`PermissionError`,
2565      but :exc:`FileNotFoundError` is caught and not raised.
2566
2567   .. method:: stat(*, follow_symlinks=True)
2568
2569      Return a :class:`stat_result` object for this entry. This method
2570      follows symbolic links by default; to stat a symbolic link add the
2571      ``follow_symlinks=False`` argument.
2572
2573      On Unix, this method always requires a system call. On Windows, it
2574      only requires a system call if *follow_symlinks* is ``True`` and the
2575      entry is a reparse point (for example, a symbolic link or directory
2576      junction).
2577
2578      On Windows, the ``st_ino``, ``st_dev`` and ``st_nlink`` attributes of the
2579      :class:`stat_result` are always set to zero. Call :func:`os.stat` to
2580      get these attributes.
2581
2582      The result is cached on the ``os.DirEntry`` object, with a separate cache
2583      for *follow_symlinks* ``True`` and ``False``. Call :func:`os.stat` to
2584      fetch up-to-date information.
2585
2586   Note that there is a nice correspondence between several attributes
2587   and methods of ``os.DirEntry`` and of :class:`pathlib.Path`.  In
2588   particular, the ``name`` attribute has the same
2589   meaning, as do the ``is_dir()``, ``is_file()``, ``is_symlink()``
2590   and ``stat()`` methods.
2591
2592   .. versionadded:: 3.5
2593
2594   .. versionchanged:: 3.6
2595      Added support for the :class:`~os.PathLike` interface.  Added support
2596      for :class:`bytes` paths on Windows.
2597
2598
2599.. function:: stat(path, *, dir_fd=None, follow_symlinks=True)
2600
2601   Get the status of a file or a file descriptor. Perform the equivalent of a
2602   :c:func:`stat` system call on the given path. *path* may be specified as
2603   either a string or bytes -- directly or indirectly through the :class:`PathLike`
2604   interface -- or as an open file descriptor. Return a :class:`stat_result`
2605   object.
2606
2607   This function normally follows symlinks; to stat a symlink add the argument
2608   ``follow_symlinks=False``, or use :func:`lstat`.
2609
2610   This function can support :ref:`specifying a file descriptor <path_fd>` and
2611   :ref:`not following symlinks <follow_symlinks>`.
2612
2613   On Windows, passing ``follow_symlinks=False`` will disable following all
2614   name-surrogate reparse points, which includes symlinks and directory
2615   junctions. Other types of reparse points that do not resemble links or that
2616   the operating system is unable to follow will be opened directly. When
2617   following a chain of multiple links, this may result in the original link
2618   being returned instead of the non-link that prevented full traversal. To
2619   obtain stat results for the final path in this case, use the
2620   :func:`os.path.realpath` function to resolve the path name as far as
2621   possible and call :func:`lstat` on the result. This does not apply to
2622   dangling symlinks or junction points, which will raise the usual exceptions.
2623
2624   .. index:: module: stat
2625
2626   Example::
2627
2628      >>> import os
2629      >>> statinfo = os.stat('somefile.txt')
2630      >>> statinfo
2631      os.stat_result(st_mode=33188, st_ino=7876932, st_dev=234881026,
2632      st_nlink=1, st_uid=501, st_gid=501, st_size=264, st_atime=1297230295,
2633      st_mtime=1297230027, st_ctime=1297230027)
2634      >>> statinfo.st_size
2635      264
2636
2637   .. seealso::
2638
2639      :func:`fstat` and :func:`lstat` functions.
2640
2641   .. versionadded:: 3.3
2642      Added the *dir_fd* and *follow_symlinks* arguments, specifying a file
2643      descriptor instead of a path.
2644
2645   .. versionchanged:: 3.6
2646      Accepts a :term:`path-like object`.
2647
2648   .. versionchanged:: 3.8
2649      On Windows, all reparse points that can be resolved by the operating
2650      system are now followed, and passing ``follow_symlinks=False``
2651      disables following all name surrogate reparse points. If the operating
2652      system reaches a reparse point that it is not able to follow, *stat* now
2653      returns the information for the original path as if
2654      ``follow_symlinks=False`` had been specified instead of raising an error.
2655
2656
2657.. class:: stat_result
2658
2659   Object whose attributes correspond roughly to the members of the
2660   :c:type:`stat` structure. It is used for the result of :func:`os.stat`,
2661   :func:`os.fstat` and :func:`os.lstat`.
2662
2663   Attributes:
2664
2665   .. attribute:: st_mode
2666
2667      File mode: file type and file mode bits (permissions).
2668
2669   .. attribute:: st_ino
2670
2671      Platform dependent, but if non-zero, uniquely identifies the
2672      file for a given value of ``st_dev``. Typically:
2673
2674      * the inode number on Unix,
2675      * the `file index
2676        <https://msdn.microsoft.com/en-us/library/aa363788>`_ on
2677        Windows
2678
2679   .. attribute:: st_dev
2680
2681      Identifier of the device on which this file resides.
2682
2683   .. attribute:: st_nlink
2684
2685      Number of hard links.
2686
2687   .. attribute:: st_uid
2688
2689      User identifier of the file owner.
2690
2691   .. attribute:: st_gid
2692
2693      Group identifier of the file owner.
2694
2695   .. attribute:: st_size
2696
2697      Size of the file in bytes, if it is a regular file or a symbolic link.
2698      The size of a symbolic link is the length of the pathname it contains,
2699      without a terminating null byte.
2700
2701   Timestamps:
2702
2703   .. attribute:: st_atime
2704
2705      Time of most recent access expressed in seconds.
2706
2707   .. attribute:: st_mtime
2708
2709      Time of most recent content modification expressed in seconds.
2710
2711   .. attribute:: st_ctime
2712
2713      Platform dependent:
2714
2715      * the time of most recent metadata change on Unix,
2716      * the time of creation on Windows, expressed in seconds.
2717
2718   .. attribute:: st_atime_ns
2719
2720      Time of most recent access expressed in nanoseconds as an integer.
2721
2722   .. attribute:: st_mtime_ns
2723
2724      Time of most recent content modification expressed in nanoseconds as an
2725      integer.
2726
2727   .. attribute:: st_ctime_ns
2728
2729      Platform dependent:
2730
2731      * the time of most recent metadata change on Unix,
2732      * the time of creation on Windows, expressed in nanoseconds as an
2733        integer.
2734
2735   .. note::
2736
2737      The exact meaning and resolution of the :attr:`st_atime`,
2738      :attr:`st_mtime`, and :attr:`st_ctime` attributes depend on the operating
2739      system and the file system. For example, on Windows systems using the FAT
2740      or FAT32 file systems, :attr:`st_mtime` has 2-second resolution, and
2741      :attr:`st_atime` has only 1-day resolution.  See your operating system
2742      documentation for details.
2743
2744      Similarly, although :attr:`st_atime_ns`, :attr:`st_mtime_ns`,
2745      and :attr:`st_ctime_ns` are always expressed in nanoseconds, many
2746      systems do not provide nanosecond precision.  On systems that do
2747      provide nanosecond precision, the floating-point object used to
2748      store :attr:`st_atime`, :attr:`st_mtime`, and :attr:`st_ctime`
2749      cannot preserve all of it, and as such will be slightly inexact.
2750      If you need the exact timestamps you should always use
2751      :attr:`st_atime_ns`, :attr:`st_mtime_ns`, and :attr:`st_ctime_ns`.
2752
2753   On some Unix systems (such as Linux), the following attributes may also be
2754   available:
2755
2756   .. attribute:: st_blocks
2757
2758      Number of 512-byte blocks allocated for file.
2759      This may be smaller than :attr:`st_size`/512 when the file has holes.
2760
2761   .. attribute:: st_blksize
2762
2763      "Preferred" blocksize for efficient file system I/O. Writing to a file in
2764      smaller chunks may cause an inefficient read-modify-rewrite.
2765
2766   .. attribute:: st_rdev
2767
2768      Type of device if an inode device.
2769
2770   .. attribute:: st_flags
2771
2772      User defined flags for file.
2773
2774   On other Unix systems (such as FreeBSD), the following attributes may be
2775   available (but may be only filled out if root tries to use them):
2776
2777   .. attribute:: st_gen
2778
2779      File generation number.
2780
2781   .. attribute:: st_birthtime
2782
2783      Time of file creation.
2784
2785   On Solaris and derivatives, the following attributes may also be
2786   available:
2787
2788   .. attribute:: st_fstype
2789
2790      String that uniquely identifies the type of the filesystem that
2791      contains the file.
2792
2793   On macOS systems, the following attributes may also be available:
2794
2795   .. attribute:: st_rsize
2796
2797      Real size of the file.
2798
2799   .. attribute:: st_creator
2800
2801      Creator of the file.
2802
2803   .. attribute:: st_type
2804
2805      File type.
2806
2807   On Windows systems, the following attributes are also available:
2808
2809   .. attribute:: st_file_attributes
2810
2811      Windows file attributes: ``dwFileAttributes`` member of the
2812      ``BY_HANDLE_FILE_INFORMATION`` structure returned by
2813      :c:func:`GetFileInformationByHandle`. See the ``FILE_ATTRIBUTE_*``
2814      constants in the :mod:`stat` module.
2815
2816   .. attribute:: st_reparse_tag
2817
2818      When :attr:`st_file_attributes` has the ``FILE_ATTRIBUTE_REPARSE_POINT``
2819      set, this field contains the tag identifying the type of reparse point.
2820      See the ``IO_REPARSE_TAG_*`` constants in the :mod:`stat` module.
2821
2822   The standard module :mod:`stat` defines functions and constants that are
2823   useful for extracting information from a :c:type:`stat` structure. (On
2824   Windows, some items are filled with dummy values.)
2825
2826   For backward compatibility, a :class:`stat_result` instance is also
2827   accessible as a tuple of at least 10 integers giving the most important (and
2828   portable) members of the :c:type:`stat` structure, in the order
2829   :attr:`st_mode`, :attr:`st_ino`, :attr:`st_dev`, :attr:`st_nlink`,
2830   :attr:`st_uid`, :attr:`st_gid`, :attr:`st_size`, :attr:`st_atime`,
2831   :attr:`st_mtime`, :attr:`st_ctime`. More items may be added at the end by
2832   some implementations. For compatibility with older Python versions,
2833   accessing :class:`stat_result` as a tuple always returns integers.
2834
2835   .. versionadded:: 3.3
2836      Added the :attr:`st_atime_ns`, :attr:`st_mtime_ns`, and
2837      :attr:`st_ctime_ns` members.
2838
2839   .. versionadded:: 3.5
2840      Added the :attr:`st_file_attributes` member on Windows.
2841
2842   .. versionchanged:: 3.5
2843      Windows now returns the file index as :attr:`st_ino` when
2844      available.
2845
2846   .. versionadded:: 3.7
2847      Added the :attr:`st_fstype` member to Solaris/derivatives.
2848
2849   .. versionadded:: 3.8
2850      Added the :attr:`st_reparse_tag` member on Windows.
2851
2852   .. versionchanged:: 3.8
2853      On Windows, the :attr:`st_mode` member now identifies special
2854      files as :const:`S_IFCHR`, :const:`S_IFIFO` or :const:`S_IFBLK`
2855      as appropriate.
2856
2857.. function:: statvfs(path)
2858
2859   Perform a :c:func:`statvfs` system call on the given path.  The return value is
2860   an object whose attributes describe the filesystem on the given path, and
2861   correspond to the members of the :c:type:`statvfs` structure, namely:
2862   :attr:`f_bsize`, :attr:`f_frsize`, :attr:`f_blocks`, :attr:`f_bfree`,
2863   :attr:`f_bavail`, :attr:`f_files`, :attr:`f_ffree`, :attr:`f_favail`,
2864   :attr:`f_flag`, :attr:`f_namemax`, :attr:`f_fsid`.
2865
2866   Two module-level constants are defined for the :attr:`f_flag` attribute's
2867   bit-flags: if :const:`ST_RDONLY` is set, the filesystem is mounted
2868   read-only, and if :const:`ST_NOSUID` is set, the semantics of
2869   setuid/setgid bits are disabled or not supported.
2870
2871   Additional module-level constants are defined for GNU/glibc based systems.
2872   These are :const:`ST_NODEV` (disallow access to device special files),
2873   :const:`ST_NOEXEC` (disallow program execution), :const:`ST_SYNCHRONOUS`
2874   (writes are synced at once), :const:`ST_MANDLOCK` (allow mandatory locks on an FS),
2875   :const:`ST_WRITE` (write on file/directory/symlink), :const:`ST_APPEND`
2876   (append-only file), :const:`ST_IMMUTABLE` (immutable file), :const:`ST_NOATIME`
2877   (do not update access times), :const:`ST_NODIRATIME` (do not update directory access
2878   times), :const:`ST_RELATIME` (update atime relative to mtime/ctime).
2879
2880   This function can support :ref:`specifying a file descriptor <path_fd>`.
2881
2882   .. availability:: Unix.
2883
2884   .. versionchanged:: 3.2
2885      The :const:`ST_RDONLY` and :const:`ST_NOSUID` constants were added.
2886
2887   .. versionadded:: 3.3
2888      Added support for specifying *path* as an open file descriptor.
2889
2890   .. versionchanged:: 3.4
2891      The :const:`ST_NODEV`, :const:`ST_NOEXEC`, :const:`ST_SYNCHRONOUS`,
2892      :const:`ST_MANDLOCK`, :const:`ST_WRITE`, :const:`ST_APPEND`,
2893      :const:`ST_IMMUTABLE`, :const:`ST_NOATIME`, :const:`ST_NODIRATIME`,
2894      and :const:`ST_RELATIME` constants were added.
2895
2896   .. versionchanged:: 3.6
2897      Accepts a :term:`path-like object`.
2898
2899   .. versionadded:: 3.7
2900      Added :attr:`f_fsid`.
2901
2902
2903.. data:: supports_dir_fd
2904
2905   A :class:`set` object indicating which functions in the :mod:`os`
2906   module accept an open file descriptor for their *dir_fd* parameter.
2907   Different platforms provide different features, and the underlying
2908   functionality Python uses to implement the *dir_fd* parameter is not
2909   available on all platforms Python supports.  For consistency's sake,
2910   functions that may support *dir_fd* always allow specifying the
2911   parameter, but will throw an exception if the functionality is used
2912   when it's not locally available. (Specifying ``None`` for *dir_fd*
2913   is always supported on all platforms.)
2914
2915   To check whether a particular function accepts an open file descriptor
2916   for its *dir_fd* parameter, use the ``in`` operator on ``supports_dir_fd``.
2917   As an example, this expression evaluates to ``True`` if :func:`os.stat`
2918   accepts open file descriptors for *dir_fd* on the local platform::
2919
2920       os.stat in os.supports_dir_fd
2921
2922   Currently *dir_fd* parameters only work on Unix platforms;
2923   none of them work on Windows.
2924
2925   .. versionadded:: 3.3
2926
2927
2928.. data:: supports_effective_ids
2929
2930   A :class:`set` object indicating whether :func:`os.access` permits
2931   specifying ``True`` for its *effective_ids* parameter on the local platform.
2932   (Specifying ``False`` for *effective_ids* is always supported on all
2933   platforms.)  If the local platform supports it, the collection will contain
2934   :func:`os.access`; otherwise it will be empty.
2935
2936   This expression evaluates to ``True`` if :func:`os.access` supports
2937   ``effective_ids=True`` on the local platform::
2938
2939       os.access in os.supports_effective_ids
2940
2941   Currently *effective_ids* is only supported on Unix platforms;
2942   it does not work on Windows.
2943
2944   .. versionadded:: 3.3
2945
2946
2947.. data:: supports_fd
2948
2949   A :class:`set` object indicating which functions in the
2950   :mod:`os` module permit specifying their *path* parameter as an open file
2951   descriptor on the local platform.  Different platforms provide different
2952   features, and the underlying functionality Python uses to accept open file
2953   descriptors as *path* arguments is not available on all platforms Python
2954   supports.
2955
2956   To determine whether a particular function permits specifying an open file
2957   descriptor for its *path* parameter, use the ``in`` operator on
2958   ``supports_fd``. As an example, this expression evaluates to ``True`` if
2959   :func:`os.chdir` accepts open file descriptors for *path* on your local
2960   platform::
2961
2962       os.chdir in os.supports_fd
2963
2964   .. versionadded:: 3.3
2965
2966
2967.. data:: supports_follow_symlinks
2968
2969   A :class:`set` object indicating which functions in the :mod:`os` module
2970   accept ``False`` for their *follow_symlinks* parameter on the local platform.
2971   Different platforms provide different features, and the underlying
2972   functionality Python uses to implement *follow_symlinks* is not available
2973   on all platforms Python supports.  For consistency's sake, functions that
2974   may support *follow_symlinks* always allow specifying the parameter, but
2975   will throw an exception if the functionality is used when it's not locally
2976   available.  (Specifying ``True`` for *follow_symlinks* is always supported
2977   on all platforms.)
2978
2979   To check whether a particular function accepts ``False`` for its
2980   *follow_symlinks* parameter, use the ``in`` operator on
2981   ``supports_follow_symlinks``.  As an example, this expression evaluates
2982   to ``True`` if you may specify ``follow_symlinks=False`` when calling
2983   :func:`os.stat` on the local platform::
2984
2985       os.stat in os.supports_follow_symlinks
2986
2987   .. versionadded:: 3.3
2988
2989
2990.. function:: symlink(src, dst, target_is_directory=False, *, dir_fd=None)
2991
2992   Create a symbolic link pointing to *src* named *dst*.
2993
2994   On Windows, a symlink represents either a file or a directory, and does not
2995   morph to the target dynamically.  If the target is present, the type of the
2996   symlink will be created to match. Otherwise, the symlink will be created
2997   as a directory if *target_is_directory* is ``True`` or a file symlink (the
2998   default) otherwise.  On non-Windows platforms, *target_is_directory* is ignored.
2999
3000   This function can support :ref:`paths relative to directory descriptors
3001   <dir_fd>`.
3002
3003   .. note::
3004
3005      On newer versions of Windows 10, unprivileged accounts can create symlinks
3006      if Developer Mode is enabled. When Developer Mode is not available/enabled,
3007      the *SeCreateSymbolicLinkPrivilege* privilege is required, or the process
3008      must be run as an administrator.
3009
3010
3011      :exc:`OSError` is raised when the function is called by an unprivileged
3012      user.
3013
3014   .. audit-event:: os.symlink src,dst,dir_fd os.symlink
3015
3016   .. availability:: Unix, Windows.
3017
3018   .. versionchanged:: 3.2
3019      Added support for Windows 6.0 (Vista) symbolic links.
3020
3021   .. versionadded:: 3.3
3022      Added the *dir_fd* argument, and now allow *target_is_directory*
3023      on non-Windows platforms.
3024
3025   .. versionchanged:: 3.6
3026      Accepts a :term:`path-like object` for *src* and *dst*.
3027
3028   .. versionchanged:: 3.8
3029      Added support for unelevated symlinks on Windows with Developer Mode.
3030
3031
3032.. function:: sync()
3033
3034   Force write of everything to disk.
3035
3036   .. availability:: Unix.
3037
3038   .. versionadded:: 3.3
3039
3040
3041.. function:: truncate(path, length)
3042
3043   Truncate the file corresponding to *path*, so that it is at most
3044   *length* bytes in size.
3045
3046   This function can support :ref:`specifying a file descriptor <path_fd>`.
3047
3048   .. audit-event:: os.truncate path,length os.truncate
3049
3050   .. availability:: Unix, Windows.
3051
3052   .. versionadded:: 3.3
3053
3054   .. versionchanged:: 3.5
3055      Added support for Windows
3056
3057   .. versionchanged:: 3.6
3058      Accepts a :term:`path-like object`.
3059
3060
3061.. function:: unlink(path, *, dir_fd=None)
3062
3063   Remove (delete) the file *path*.  This function is semantically
3064   identical to :func:`remove`; the ``unlink`` name is its
3065   traditional Unix name.  Please see the documentation for
3066   :func:`remove` for further information.
3067
3068   .. audit-event:: os.remove path,dir_fd os.unlink
3069
3070   .. versionadded:: 3.3
3071      The *dir_fd* parameter.
3072
3073   .. versionchanged:: 3.6
3074      Accepts a :term:`path-like object`.
3075
3076
3077.. function:: utime(path, times=None, *[, ns], dir_fd=None, follow_symlinks=True)
3078
3079   Set the access and modified times of the file specified by *path*.
3080
3081   :func:`utime` takes two optional parameters, *times* and *ns*.
3082   These specify the times set on *path* and are used as follows:
3083
3084   - If *ns* is specified,
3085     it must be a 2-tuple of the form ``(atime_ns, mtime_ns)``
3086     where each member is an int expressing nanoseconds.
3087   - If *times* is not ``None``,
3088     it must be a 2-tuple of the form ``(atime, mtime)``
3089     where each member is an int or float expressing seconds.
3090   - If *times* is ``None`` and *ns* is unspecified,
3091     this is equivalent to specifying ``ns=(atime_ns, mtime_ns)``
3092     where both times are the current time.
3093
3094   It is an error to specify tuples for both *times* and *ns*.
3095
3096   Note that the exact times you set here may not be returned by a subsequent
3097   :func:`~os.stat` call, depending on the resolution with which your operating
3098   system records access and modification times; see :func:`~os.stat`. The best
3099   way to preserve exact times is to use the *st_atime_ns* and *st_mtime_ns*
3100   fields from the :func:`os.stat` result object with the *ns* parameter to
3101   `utime`.
3102
3103   This function can support :ref:`specifying a file descriptor <path_fd>`,
3104   :ref:`paths relative to directory descriptors <dir_fd>` and :ref:`not
3105   following symlinks <follow_symlinks>`.
3106
3107   .. audit-event:: os.utime path,times,ns,dir_fd os.utime
3108
3109   .. versionadded:: 3.3
3110      Added support for specifying *path* as an open file descriptor,
3111      and the *dir_fd*, *follow_symlinks*, and *ns* parameters.
3112
3113   .. versionchanged:: 3.6
3114      Accepts a :term:`path-like object`.
3115
3116
3117.. function:: walk(top, topdown=True, onerror=None, followlinks=False)
3118
3119   .. index::
3120      single: directory; walking
3121      single: directory; traversal
3122
3123   Generate the file names in a directory tree by walking the tree
3124   either top-down or bottom-up. For each directory in the tree rooted at directory
3125   *top* (including *top* itself), it yields a 3-tuple ``(dirpath, dirnames,
3126   filenames)``.
3127
3128   *dirpath* is a string, the path to the directory.  *dirnames* is a list of the
3129   names of the subdirectories in *dirpath* (excluding ``'.'`` and ``'..'``).
3130   *filenames* is a list of the names of the non-directory files in *dirpath*.
3131   Note that the names in the lists contain no path components.  To get a full path
3132   (which begins with *top*) to a file or directory in *dirpath*, do
3133   ``os.path.join(dirpath, name)``.  Whether or not the lists are sorted
3134   depends on the file system.  If a file is removed from or added to the
3135   *dirpath* directory during generating the lists, whether a name for that
3136   file be included is unspecified.
3137
3138   If optional argument *topdown* is ``True`` or not specified, the triple for a
3139   directory is generated before the triples for any of its subdirectories
3140   (directories are generated top-down).  If *topdown* is ``False``, the triple
3141   for a directory is generated after the triples for all of its subdirectories
3142   (directories are generated bottom-up). No matter the value of *topdown*, the
3143   list of subdirectories is retrieved before the tuples for the directory and
3144   its subdirectories are generated.
3145
3146   When *topdown* is ``True``, the caller can modify the *dirnames* list in-place
3147   (perhaps using :keyword:`del` or slice assignment), and :func:`walk` will only
3148   recurse into the subdirectories whose names remain in *dirnames*; this can be
3149   used to prune the search, impose a specific order of visiting, or even to inform
3150   :func:`walk` about directories the caller creates or renames before it resumes
3151   :func:`walk` again.  Modifying *dirnames* when *topdown* is ``False`` has
3152   no effect on the behavior of the walk, because in bottom-up mode the directories
3153   in *dirnames* are generated before *dirpath* itself is generated.
3154
3155   By default, errors from the :func:`scandir` call are ignored.  If optional
3156   argument *onerror* is specified, it should be a function; it will be called with
3157   one argument, an :exc:`OSError` instance.  It can report the error to continue
3158   with the walk, or raise the exception to abort the walk.  Note that the filename
3159   is available as the ``filename`` attribute of the exception object.
3160
3161   By default, :func:`walk` will not walk down into symbolic links that resolve to
3162   directories. Set *followlinks* to ``True`` to visit directories pointed to by
3163   symlinks, on systems that support them.
3164
3165   .. note::
3166
3167      Be aware that setting *followlinks* to ``True`` can lead to infinite
3168      recursion if a link points to a parent directory of itself. :func:`walk`
3169      does not keep track of the directories it visited already.
3170
3171   .. note::
3172
3173      If you pass a relative pathname, don't change the current working directory
3174      between resumptions of :func:`walk`.  :func:`walk` never changes the current
3175      directory, and assumes that its caller doesn't either.
3176
3177   This example displays the number of bytes taken by non-directory files in each
3178   directory under the starting directory, except that it doesn't look under any
3179   CVS subdirectory::
3180
3181      import os
3182      from os.path import join, getsize
3183      for root, dirs, files in os.walk('python/Lib/email'):
3184          print(root, "consumes", end=" ")
3185          print(sum(getsize(join(root, name)) for name in files), end=" ")
3186          print("bytes in", len(files), "non-directory files")
3187          if 'CVS' in dirs:
3188              dirs.remove('CVS')  # don't visit CVS directories
3189
3190   In the next example (simple implementation of :func:`shutil.rmtree`),
3191   walking the tree bottom-up is essential, :func:`rmdir` doesn't allow
3192   deleting a directory before the directory is empty::
3193
3194      # Delete everything reachable from the directory named in "top",
3195      # assuming there are no symbolic links.
3196      # CAUTION:  This is dangerous!  For example, if top == '/', it
3197      # could delete all your disk files.
3198      import os
3199      for root, dirs, files in os.walk(top, topdown=False):
3200          for name in files:
3201              os.remove(os.path.join(root, name))
3202          for name in dirs:
3203              os.rmdir(os.path.join(root, name))
3204
3205   .. audit-event:: os.walk top,topdown,onerror,followlinks os.walk
3206
3207   .. versionchanged:: 3.5
3208      This function now calls :func:`os.scandir` instead of :func:`os.listdir`,
3209      making it faster by reducing the number of calls to :func:`os.stat`.
3210
3211   .. versionchanged:: 3.6
3212      Accepts a :term:`path-like object`.
3213
3214
3215.. function:: fwalk(top='.', topdown=True, onerror=None, *, follow_symlinks=False, dir_fd=None)
3216
3217   .. index::
3218      single: directory; walking
3219      single: directory; traversal
3220
3221   This behaves exactly like :func:`walk`, except that it yields a 4-tuple
3222   ``(dirpath, dirnames, filenames, dirfd)``, and it supports ``dir_fd``.
3223
3224   *dirpath*, *dirnames* and *filenames* are identical to :func:`walk` output,
3225   and *dirfd* is a file descriptor referring to the directory *dirpath*.
3226
3227   This function always supports :ref:`paths relative to directory descriptors
3228   <dir_fd>` and :ref:`not following symlinks <follow_symlinks>`.  Note however
3229   that, unlike other functions, the :func:`fwalk` default value for
3230   *follow_symlinks* is ``False``.
3231
3232   .. note::
3233
3234      Since :func:`fwalk` yields file descriptors, those are only valid until
3235      the next iteration step, so you should duplicate them (e.g. with
3236      :func:`dup`) if you want to keep them longer.
3237
3238   This example displays the number of bytes taken by non-directory files in each
3239   directory under the starting directory, except that it doesn't look under any
3240   CVS subdirectory::
3241
3242      import os
3243      for root, dirs, files, rootfd in os.fwalk('python/Lib/email'):
3244          print(root, "consumes", end="")
3245          print(sum([os.stat(name, dir_fd=rootfd).st_size for name in files]),
3246                end="")
3247          print("bytes in", len(files), "non-directory files")
3248          if 'CVS' in dirs:
3249              dirs.remove('CVS')  # don't visit CVS directories
3250
3251   In the next example, walking the tree bottom-up is essential:
3252   :func:`rmdir` doesn't allow deleting a directory before the directory is
3253   empty::
3254
3255      # Delete everything reachable from the directory named in "top",
3256      # assuming there are no symbolic links.
3257      # CAUTION:  This is dangerous!  For example, if top == '/', it
3258      # could delete all your disk files.
3259      import os
3260      for root, dirs, files, rootfd in os.fwalk(top, topdown=False):
3261          for name in files:
3262              os.unlink(name, dir_fd=rootfd)
3263          for name in dirs:
3264              os.rmdir(name, dir_fd=rootfd)
3265
3266   .. audit-event:: os.fwalk top,topdown,onerror,follow_symlinks,dir_fd os.fwalk
3267
3268   .. availability:: Unix.
3269
3270   .. versionadded:: 3.3
3271
3272   .. versionchanged:: 3.6
3273      Accepts a :term:`path-like object`.
3274
3275   .. versionchanged:: 3.7
3276      Added support for :class:`bytes` paths.
3277
3278
3279.. function:: memfd_create(name[, flags=os.MFD_CLOEXEC])
3280
3281   Create an anonymous file and return a file descriptor that refers to it.
3282   *flags* must be one of the ``os.MFD_*`` constants available on the system
3283   (or a bitwise ORed combination of them).  By default, the new file
3284   descriptor is :ref:`non-inheritable <fd_inheritance>`.
3285
3286   The name supplied in *name* is used as a filename and will be displayed as
3287   the target of the corresponding symbolic link in the directory
3288   ``/proc/self/fd/``. The displayed name is always prefixed with ``memfd:``
3289   and serves only for debugging purposes. Names do not affect the behavior of
3290   the file descriptor, and as such multiple files can have the same name
3291   without any side effects.
3292
3293   .. availability:: Linux 3.17 or newer with glibc 2.27 or newer.
3294
3295   .. versionadded:: 3.8
3296
3297
3298.. data:: MFD_CLOEXEC
3299          MFD_ALLOW_SEALING
3300          MFD_HUGETLB
3301          MFD_HUGE_SHIFT
3302          MFD_HUGE_MASK
3303          MFD_HUGE_64KB
3304          MFD_HUGE_512KB
3305          MFD_HUGE_1MB
3306          MFD_HUGE_2MB
3307          MFD_HUGE_8MB
3308          MFD_HUGE_16MB
3309          MFD_HUGE_32MB
3310          MFD_HUGE_256MB
3311          MFD_HUGE_512MB
3312          MFD_HUGE_1GB
3313          MFD_HUGE_2GB
3314          MFD_HUGE_16GB
3315
3316   These flags can be passed to :func:`memfd_create`.
3317
3318   .. availability:: Linux 3.17 or newer with glibc 2.27 or newer.  The
3319      ``MFD_HUGE*`` flags are only available since Linux 4.14.
3320
3321   .. versionadded:: 3.8
3322
3323
3324.. function:: eventfd(initval[, flags=os.EFD_CLOEXEC])
3325
3326   Create and return an event file descriptor. The file descriptors supports
3327   raw :func:`read` and :func:`write` with a buffer size of 8,
3328   :func:`~select.select`, :func:`~select.poll` and similar. See man page
3329   :manpage:`eventfd(2)` for more information.  By default, the
3330   new file descriptor is :ref:`non-inheritable <fd_inheritance>`.
3331
3332   *initval* is the initial value of the event counter. The initial value
3333   must be an 32 bit unsigned integer. Please note that the initial value is
3334   limited to a 32 bit unsigned int although the event counter is an unsigned
3335   64 bit integer with a maximum value of 2\ :sup:`64`\ -\ 2.
3336
3337   *flags* can be constructed from :const:`EFD_CLOEXEC`,
3338   :const:`EFD_NONBLOCK`, and :const:`EFD_SEMAPHORE`.
3339
3340   If :const:`EFD_SEMAPHORE` is specified and the event counter is non-zero,
3341   :func:`eventfd_read` returns 1 and decrements the counter by one.
3342
3343   If :const:`EFD_SEMAPHORE` is not specified and the event counter is
3344   non-zero, :func:`eventfd_read` returns the current event counter value and
3345   resets the counter to zero.
3346
3347   If the event counter is zero and :const:`EFD_NONBLOCK` is not
3348   specified, :func:`eventfd_read` blocks.
3349
3350   :func:`eventfd_write` increments the event counter. Write blocks if the
3351   write operation would increment the counter to a value larger than
3352   2\ :sup:`64`\ -\ 2.
3353
3354   Example::
3355
3356       import os
3357
3358       # semaphore with start value '1'
3359       fd = os.eventfd(1, os.EFD_SEMAPHORE | os.EFC_CLOEXEC)
3360       try:
3361           # acquire semaphore
3362           v = os.eventfd_read(fd)
3363           try:
3364               do_work()
3365           finally:
3366               # release semaphore
3367               os.eventfd_write(fd, v)
3368       finally:
3369           os.close(fd)
3370
3371   .. availability:: Linux 2.6.27 or newer with glibc 2.8 or newer.
3372
3373   .. versionadded:: 3.10
3374
3375.. function:: eventfd_read(fd)
3376
3377   Read value from an :func:`eventfd` file descriptor and return a 64 bit
3378   unsigned int. The function does not verify that *fd* is an :func:`eventfd`.
3379
3380   .. availability:: See :func:`eventfd`
3381
3382   .. versionadded:: 3.10
3383
3384.. function:: eventfd_write(fd, value)
3385
3386   Add value to an :func:`eventfd` file descriptor. *value* must be a 64 bit
3387   unsigned int. The function does not verify that *fd* is an :func:`eventfd`.
3388
3389   .. availability:: See :func:`eventfd`
3390
3391   .. versionadded:: 3.10
3392
3393.. data:: EFD_CLOEXEC
3394
3395   Set close-on-exec flag for new :func:`eventfd` file descriptor.
3396
3397   .. availability:: See :func:`eventfd`
3398
3399   .. versionadded:: 3.10
3400
3401.. data:: EFD_NONBLOCK
3402
3403   Set :const:`O_NONBLOCK` status flag for new :func:`eventfd` file
3404   descriptor.
3405
3406   .. availability:: See :func:`eventfd`
3407
3408   .. versionadded:: 3.10
3409
3410.. data:: EFD_SEMAPHORE
3411
3412   Provide semaphore-like semantics for reads from a :func:`eventfd` file
3413   descriptor. On read the internal counter is decremented by one.
3414
3415   .. availability:: Linux 2.6.30 or newer with glibc 2.8 or newer.
3416
3417   .. versionadded:: 3.10
3418
3419
3420Linux extended attributes
3421~~~~~~~~~~~~~~~~~~~~~~~~~
3422
3423.. versionadded:: 3.3
3424
3425These functions are all available on Linux only.
3426
3427.. function:: getxattr(path, attribute, *, follow_symlinks=True)
3428
3429   Return the value of the extended filesystem attribute *attribute* for
3430   *path*. *attribute* can be bytes or str (directly or indirectly through the
3431   :class:`PathLike` interface). If it is str, it is encoded with the filesystem
3432   encoding.
3433
3434   This function can support :ref:`specifying a file descriptor <path_fd>` and
3435   :ref:`not following symlinks <follow_symlinks>`.
3436
3437   .. audit-event:: os.getxattr path,attribute os.getxattr
3438
3439   .. versionchanged:: 3.6
3440      Accepts a :term:`path-like object` for *path* and *attribute*.
3441
3442
3443.. function:: listxattr(path=None, *, follow_symlinks=True)
3444
3445   Return a list of the extended filesystem attributes on *path*.  The
3446   attributes in the list are represented as strings decoded with the filesystem
3447   encoding.  If *path* is ``None``, :func:`listxattr` will examine the current
3448   directory.
3449
3450   This function can support :ref:`specifying a file descriptor <path_fd>` and
3451   :ref:`not following symlinks <follow_symlinks>`.
3452
3453   .. audit-event:: os.listxattr path os.listxattr
3454
3455   .. versionchanged:: 3.6
3456      Accepts a :term:`path-like object`.
3457
3458
3459.. function:: removexattr(path, attribute, *, follow_symlinks=True)
3460
3461   Removes the extended filesystem attribute *attribute* from *path*.
3462   *attribute* should be bytes or str (directly or indirectly through the
3463   :class:`PathLike` interface). If it is a string, it is encoded
3464   with the :term:`filesystem encoding and error handler`.
3465
3466   This function can support :ref:`specifying a file descriptor <path_fd>` and
3467   :ref:`not following symlinks <follow_symlinks>`.
3468
3469   .. audit-event:: os.removexattr path,attribute os.removexattr
3470
3471   .. versionchanged:: 3.6
3472      Accepts a :term:`path-like object` for *path* and *attribute*.
3473
3474
3475.. function:: setxattr(path, attribute, value, flags=0, *, follow_symlinks=True)
3476
3477   Set the extended filesystem attribute *attribute* on *path* to *value*.
3478   *attribute* must be a bytes or str with no embedded NULs (directly or
3479   indirectly through the :class:`PathLike` interface). If it is a str,
3480   it is encoded with the :term:`filesystem encoding and error handler`.  *flags* may be
3481   :data:`XATTR_REPLACE` or :data:`XATTR_CREATE`. If :data:`XATTR_REPLACE` is
3482   given and the attribute does not exist, ``ENODATA`` will be raised.
3483   If :data:`XATTR_CREATE` is given and the attribute already exists, the
3484   attribute will not be created and ``EEXISTS`` will be raised.
3485
3486   This function can support :ref:`specifying a file descriptor <path_fd>` and
3487   :ref:`not following symlinks <follow_symlinks>`.
3488
3489   .. note::
3490
3491      A bug in Linux kernel versions less than 2.6.39 caused the flags argument
3492      to be ignored on some filesystems.
3493
3494   .. audit-event:: os.setxattr path,attribute,value,flags os.setxattr
3495
3496   .. versionchanged:: 3.6
3497      Accepts a :term:`path-like object` for *path* and *attribute*.
3498
3499
3500.. data:: XATTR_SIZE_MAX
3501
3502   The maximum size the value of an extended attribute can be. Currently, this
3503   is 64 KiB on Linux.
3504
3505
3506.. data:: XATTR_CREATE
3507
3508   This is a possible value for the flags argument in :func:`setxattr`. It
3509   indicates the operation must create an attribute.
3510
3511
3512.. data:: XATTR_REPLACE
3513
3514   This is a possible value for the flags argument in :func:`setxattr`. It
3515   indicates the operation must replace an existing attribute.
3516
3517
3518.. _os-process:
3519
3520Process Management
3521------------------
3522
3523These functions may be used to create and manage processes.
3524
3525The various :func:`exec\* <execl>` functions take a list of arguments for the new
3526program loaded into the process.  In each case, the first of these arguments is
3527passed to the new program as its own name rather than as an argument a user may
3528have typed on a command line.  For the C programmer, this is the ``argv[0]``
3529passed to a program's :c:func:`main`.  For example, ``os.execv('/bin/echo',
3530['foo', 'bar'])`` will only print ``bar`` on standard output; ``foo`` will seem
3531to be ignored.
3532
3533
3534.. function:: abort()
3535
3536   Generate a :const:`SIGABRT` signal to the current process.  On Unix, the default
3537   behavior is to produce a core dump; on Windows, the process immediately returns
3538   an exit code of ``3``.  Be aware that calling this function will not call the
3539   Python signal handler registered for :const:`SIGABRT` with
3540   :func:`signal.signal`.
3541
3542
3543.. function:: add_dll_directory(path)
3544
3545   Add a path to the DLL search path.
3546
3547   This search path is used when resolving dependencies for imported
3548   extension modules (the module itself is resolved through sys.path),
3549   and also by :mod:`ctypes`.
3550
3551   Remove the directory by calling **close()** on the returned object
3552   or using it in a :keyword:`with` statement.
3553
3554   See the `Microsoft documentation
3555   <https://msdn.microsoft.com/44228cf2-6306-466c-8f16-f513cd3ba8b5>`_
3556   for more information about how DLLs are loaded.
3557
3558   .. audit-event:: os.add_dll_directory path os.add_dll_directory
3559
3560   .. availability:: Windows.
3561
3562   .. versionadded:: 3.8
3563      Previous versions of CPython would resolve DLLs using the default
3564      behavior for the current process. This led to inconsistencies,
3565      such as only sometimes searching :envvar:`PATH` or the current
3566      working directory, and OS functions such as ``AddDllDirectory``
3567      having no effect.
3568
3569      In 3.8, the two primary ways DLLs are loaded now explicitly
3570      override the process-wide behavior to ensure consistency. See the
3571      :ref:`porting notes <bpo-36085-whatsnew>` for information on
3572      updating libraries.
3573
3574
3575.. function:: execl(path, arg0, arg1, ...)
3576              execle(path, arg0, arg1, ..., env)
3577              execlp(file, arg0, arg1, ...)
3578              execlpe(file, arg0, arg1, ..., env)
3579              execv(path, args)
3580              execve(path, args, env)
3581              execvp(file, args)
3582              execvpe(file, args, env)
3583
3584   These functions all execute a new program, replacing the current process; they
3585   do not return.  On Unix, the new executable is loaded into the current process,
3586   and will have the same process id as the caller.  Errors will be reported as
3587   :exc:`OSError` exceptions.
3588
3589   The current process is replaced immediately. Open file objects and
3590   descriptors are not flushed, so if there may be data buffered
3591   on these open files, you should flush them using
3592   :func:`sys.stdout.flush` or :func:`os.fsync` before calling an
3593   :func:`exec\* <execl>` function.
3594
3595   The "l" and "v" variants of the :func:`exec\* <execl>` functions differ in how
3596   command-line arguments are passed.  The "l" variants are perhaps the easiest
3597   to work with if the number of parameters is fixed when the code is written; the
3598   individual parameters simply become additional parameters to the :func:`execl\*`
3599   functions.  The "v" variants are good when the number of parameters is
3600   variable, with the arguments being passed in a list or tuple as the *args*
3601   parameter.  In either case, the arguments to the child process should start with
3602   the name of the command being run, but this is not enforced.
3603
3604   The variants which include a "p" near the end (:func:`execlp`,
3605   :func:`execlpe`, :func:`execvp`, and :func:`execvpe`) will use the
3606   :envvar:`PATH` environment variable to locate the program *file*.  When the
3607   environment is being replaced (using one of the :func:`exec\*e <execl>` variants,
3608   discussed in the next paragraph), the new environment is used as the source of
3609   the :envvar:`PATH` variable. The other variants, :func:`execl`, :func:`execle`,
3610   :func:`execv`, and :func:`execve`, will not use the :envvar:`PATH` variable to
3611   locate the executable; *path* must contain an appropriate absolute or relative
3612   path.
3613
3614   For :func:`execle`, :func:`execlpe`, :func:`execve`, and :func:`execvpe` (note
3615   that these all end in "e"), the *env* parameter must be a mapping which is
3616   used to define the environment variables for the new process (these are used
3617   instead of the current process' environment); the functions :func:`execl`,
3618   :func:`execlp`, :func:`execv`, and :func:`execvp` all cause the new process to
3619   inherit the environment of the current process.
3620
3621   For :func:`execve` on some platforms, *path* may also be specified as an open
3622   file descriptor.  This functionality may not be supported on your platform;
3623   you can check whether or not it is available using :data:`os.supports_fd`.
3624   If it is unavailable, using it will raise a :exc:`NotImplementedError`.
3625
3626   .. audit-event:: os.exec path,args,env os.execl
3627
3628   .. availability:: Unix, Windows.
3629
3630   .. versionadded:: 3.3
3631      Added support for specifying *path* as an open file descriptor
3632      for :func:`execve`.
3633
3634   .. versionchanged:: 3.6
3635      Accepts a :term:`path-like object`.
3636
3637.. function:: _exit(n)
3638
3639   Exit the process with status *n*, without calling cleanup handlers, flushing
3640   stdio buffers, etc.
3641
3642   .. note::
3643
3644      The standard way to exit is ``sys.exit(n)``.  :func:`_exit` should
3645      normally only be used in the child process after a :func:`fork`.
3646
3647The following exit codes are defined and can be used with :func:`_exit`,
3648although they are not required.  These are typically used for system programs
3649written in Python, such as a mail server's external command delivery program.
3650
3651.. note::
3652
3653   Some of these may not be available on all Unix platforms, since there is some
3654   variation.  These constants are defined where they are defined by the underlying
3655   platform.
3656
3657
3658.. data:: EX_OK
3659
3660   Exit code that means no error occurred.
3661
3662   .. availability:: Unix.
3663
3664
3665.. data:: EX_USAGE
3666
3667   Exit code that means the command was used incorrectly, such as when the wrong
3668   number of arguments are given.
3669
3670   .. availability:: Unix.
3671
3672
3673.. data:: EX_DATAERR
3674
3675   Exit code that means the input data was incorrect.
3676
3677   .. availability:: Unix.
3678
3679
3680.. data:: EX_NOINPUT
3681
3682   Exit code that means an input file did not exist or was not readable.
3683
3684   .. availability:: Unix.
3685
3686
3687.. data:: EX_NOUSER
3688
3689   Exit code that means a specified user did not exist.
3690
3691   .. availability:: Unix.
3692
3693
3694.. data:: EX_NOHOST
3695
3696   Exit code that means a specified host did not exist.
3697
3698   .. availability:: Unix.
3699
3700
3701.. data:: EX_UNAVAILABLE
3702
3703   Exit code that means that a required service is unavailable.
3704
3705   .. availability:: Unix.
3706
3707
3708.. data:: EX_SOFTWARE
3709
3710   Exit code that means an internal software error was detected.
3711
3712   .. availability:: Unix.
3713
3714
3715.. data:: EX_OSERR
3716
3717   Exit code that means an operating system error was detected, such as the
3718   inability to fork or create a pipe.
3719
3720   .. availability:: Unix.
3721
3722
3723.. data:: EX_OSFILE
3724
3725   Exit code that means some system file did not exist, could not be opened, or had
3726   some other kind of error.
3727
3728   .. availability:: Unix.
3729
3730
3731.. data:: EX_CANTCREAT
3732
3733   Exit code that means a user specified output file could not be created.
3734
3735   .. availability:: Unix.
3736
3737
3738.. data:: EX_IOERR
3739
3740   Exit code that means that an error occurred while doing I/O on some file.
3741
3742   .. availability:: Unix.
3743
3744
3745.. data:: EX_TEMPFAIL
3746
3747   Exit code that means a temporary failure occurred.  This indicates something
3748   that may not really be an error, such as a network connection that couldn't be
3749   made during a retryable operation.
3750
3751   .. availability:: Unix.
3752
3753
3754.. data:: EX_PROTOCOL
3755
3756   Exit code that means that a protocol exchange was illegal, invalid, or not
3757   understood.
3758
3759   .. availability:: Unix.
3760
3761
3762.. data:: EX_NOPERM
3763
3764   Exit code that means that there were insufficient permissions to perform the
3765   operation (but not intended for file system problems).
3766
3767   .. availability:: Unix.
3768
3769
3770.. data:: EX_CONFIG
3771
3772   Exit code that means that some kind of configuration error occurred.
3773
3774   .. availability:: Unix.
3775
3776
3777.. data:: EX_NOTFOUND
3778
3779   Exit code that means something like "an entry was not found".
3780
3781   .. availability:: Unix.
3782
3783
3784.. function:: fork()
3785
3786   Fork a child process.  Return ``0`` in the child and the child's process id in the
3787   parent.  If an error occurs :exc:`OSError` is raised.
3788
3789   Note that some platforms including FreeBSD <= 6.3 and Cygwin have
3790   known issues when using ``fork()`` from a thread.
3791
3792   .. audit-event:: os.fork "" os.fork
3793
3794   .. versionchanged:: 3.8
3795      Calling ``fork()`` in a subinterpreter is no longer supported
3796      (:exc:`RuntimeError` is raised).
3797
3798   .. warning::
3799
3800      See :mod:`ssl` for applications that use the SSL module with fork().
3801
3802   .. availability:: Unix.
3803
3804
3805.. function:: forkpty()
3806
3807   Fork a child process, using a new pseudo-terminal as the child's controlling
3808   terminal. Return a pair of ``(pid, fd)``, where *pid* is ``0`` in the child, the
3809   new child's process id in the parent, and *fd* is the file descriptor of the
3810   master end of the pseudo-terminal.  For a more portable approach, use the
3811   :mod:`pty` module.  If an error occurs :exc:`OSError` is raised.
3812
3813   .. audit-event:: os.forkpty "" os.forkpty
3814
3815   .. versionchanged:: 3.8
3816      Calling ``forkpty()`` in a subinterpreter is no longer supported
3817      (:exc:`RuntimeError` is raised).
3818
3819   .. availability:: some flavors of Unix.
3820
3821
3822.. function:: kill(pid, sig)
3823
3824   .. index::
3825      single: process; killing
3826      single: process; signalling
3827
3828   Send signal *sig* to the process *pid*.  Constants for the specific signals
3829   available on the host platform are defined in the :mod:`signal` module.
3830
3831   Windows: The :data:`signal.CTRL_C_EVENT` and
3832   :data:`signal.CTRL_BREAK_EVENT` signals are special signals which can
3833   only be sent to console processes which share a common console window,
3834   e.g., some subprocesses. Any other value for *sig* will cause the process
3835   to be unconditionally killed by the TerminateProcess API, and the exit code
3836   will be set to *sig*. The Windows version of :func:`kill` additionally takes
3837   process handles to be killed.
3838
3839   See also :func:`signal.pthread_kill`.
3840
3841   .. audit-event:: os.kill pid,sig os.kill
3842
3843   .. versionadded:: 3.2
3844      Windows support.
3845
3846
3847.. function:: killpg(pgid, sig)
3848
3849   .. index::
3850      single: process; killing
3851      single: process; signalling
3852
3853   Send the signal *sig* to the process group *pgid*.
3854
3855   .. audit-event:: os.killpg pgid,sig os.killpg
3856
3857   .. availability:: Unix.
3858
3859
3860.. function:: nice(increment)
3861
3862   Add *increment* to the process's "niceness".  Return the new niceness.
3863
3864   .. availability:: Unix.
3865
3866
3867.. function:: pidfd_open(pid, flags=0)
3868
3869   Return a file descriptor referring to the process *pid*.  This descriptor can
3870   be used to perform process management without races and signals.  The *flags*
3871   argument is provided for future extensions; no flag values are currently
3872   defined.
3873
3874   See the :manpage:`pidfd_open(2)` man page for more details.
3875
3876   .. availability:: Linux 5.3+
3877   .. versionadded:: 3.9
3878
3879
3880.. function:: plock(op)
3881
3882   Lock program segments into memory.  The value of *op* (defined in
3883   ``<sys/lock.h>``) determines which segments are locked.
3884
3885   .. availability:: Unix.
3886
3887
3888.. function:: popen(cmd, mode='r', buffering=-1)
3889
3890   Open a pipe to or from command *cmd*.
3891   The return value is an open file object
3892   connected to the pipe, which can be read or written depending on whether *mode*
3893   is ``'r'`` (default) or ``'w'``. The *buffering* argument has the same meaning as
3894   the corresponding argument to the built-in :func:`open` function. The
3895   returned file object reads or writes text strings rather than bytes.
3896
3897   The ``close`` method returns :const:`None` if the subprocess exited
3898   successfully, or the subprocess's return code if there was an
3899   error. On POSIX systems, if the return code is positive it
3900   represents the return value of the process left-shifted by one
3901   byte.  If the return code is negative, the process was terminated
3902   by the signal given by the negated value of the return code.  (For
3903   example, the return value might be ``- signal.SIGKILL`` if the
3904   subprocess was killed.)  On Windows systems, the return value
3905   contains the signed integer return code from the child process.
3906
3907   On Unix, :func:`waitstatus_to_exitcode` can be used to convert the ``close``
3908   method result (exit status) into an exit code if it is not ``None``. On
3909   Windows, the ``close`` method result is directly the exit code
3910   (or ``None``).
3911
3912   This is implemented using :class:`subprocess.Popen`; see that class's
3913   documentation for more powerful ways to manage and communicate with
3914   subprocesses.
3915
3916
3917.. function:: posix_spawn(path, argv, env, *, file_actions=None, \
3918                          setpgroup=None, resetids=False, setsid=False, setsigmask=(), \
3919                          setsigdef=(), scheduler=None)
3920
3921   Wraps the :c:func:`posix_spawn` C library API for use from Python.
3922
3923   Most users should use :func:`subprocess.run` instead of :func:`posix_spawn`.
3924
3925   The positional-only arguments *path*, *args*, and *env* are similar to
3926   :func:`execve`.
3927
3928   The *path* parameter is the path to the executable file.  The *path* should
3929   contain a directory.  Use :func:`posix_spawnp` to pass an executable file
3930   without directory.
3931
3932   The *file_actions* argument may be a sequence of tuples describing actions
3933   to take on specific file descriptors in the child process between the C
3934   library implementation's :c:func:`fork` and :c:func:`exec` steps.
3935   The first item in each tuple must be one of the three type indicator
3936   listed below describing the remaining tuple elements:
3937
3938   .. data:: POSIX_SPAWN_OPEN
3939
3940      (``os.POSIX_SPAWN_OPEN``, *fd*, *path*, *flags*, *mode*)
3941
3942      Performs ``os.dup2(os.open(path, flags, mode), fd)``.
3943
3944   .. data:: POSIX_SPAWN_CLOSE
3945
3946      (``os.POSIX_SPAWN_CLOSE``, *fd*)
3947
3948      Performs ``os.close(fd)``.
3949
3950   .. data:: POSIX_SPAWN_DUP2
3951
3952      (``os.POSIX_SPAWN_DUP2``, *fd*, *new_fd*)
3953
3954      Performs ``os.dup2(fd, new_fd)``.
3955
3956   These tuples correspond to the C library
3957   :c:func:`posix_spawn_file_actions_addopen`,
3958   :c:func:`posix_spawn_file_actions_addclose`, and
3959   :c:func:`posix_spawn_file_actions_adddup2` API calls used to prepare
3960   for the :c:func:`posix_spawn` call itself.
3961
3962   The *setpgroup* argument will set the process group of the child to the value
3963   specified. If the value specified is 0, the child's process group ID will be
3964   made the same as its process ID. If the value of *setpgroup* is not set, the
3965   child will inherit the parent's process group ID. This argument corresponds
3966   to the C library :c:data:`POSIX_SPAWN_SETPGROUP` flag.
3967
3968   If the *resetids* argument is ``True`` it will reset the effective UID and
3969   GID of the child to the real UID and GID of the parent process. If the
3970   argument is ``False``, then the child retains the effective UID and GID of
3971   the parent. In either case, if the set-user-ID and set-group-ID permission
3972   bits are enabled on the executable file, their effect will override the
3973   setting of the effective UID and GID. This argument corresponds to the C
3974   library :c:data:`POSIX_SPAWN_RESETIDS` flag.
3975
3976   If the *setsid* argument is ``True``, it will create a new session ID
3977   for `posix_spawn`. *setsid* requires :c:data:`POSIX_SPAWN_SETSID`
3978   or :c:data:`POSIX_SPAWN_SETSID_NP` flag. Otherwise, :exc:`NotImplementedError`
3979   is raised.
3980
3981   The *setsigmask* argument will set the signal mask to the signal set
3982   specified. If the parameter is not used, then the child inherits the
3983   parent's signal mask. This argument corresponds to the C library
3984   :c:data:`POSIX_SPAWN_SETSIGMASK` flag.
3985
3986   The *sigdef* argument will reset the disposition of all signals in the set
3987   specified. This argument corresponds to the C library
3988   :c:data:`POSIX_SPAWN_SETSIGDEF` flag.
3989
3990   The *scheduler* argument must be a tuple containing the (optional) scheduler
3991   policy and an instance of :class:`sched_param` with the scheduler parameters.
3992   A value of ``None`` in the place of the scheduler policy indicates that is
3993   not being provided. This argument is a combination of the C library
3994   :c:data:`POSIX_SPAWN_SETSCHEDPARAM` and :c:data:`POSIX_SPAWN_SETSCHEDULER`
3995   flags.
3996
3997   .. audit-event:: os.posix_spawn path,argv,env os.posix_spawn
3998
3999   .. versionadded:: 3.8
4000
4001   .. availability:: Unix.
4002
4003.. function:: posix_spawnp(path, argv, env, *, file_actions=None, \
4004                          setpgroup=None, resetids=False, setsid=False, setsigmask=(), \
4005                          setsigdef=(), scheduler=None)
4006
4007   Wraps the :c:func:`posix_spawnp` C library API for use from Python.
4008
4009   Similar to :func:`posix_spawn` except that the system searches
4010   for the *executable* file in the list of directories specified by the
4011   :envvar:`PATH` environment variable (in the same way as for ``execvp(3)``).
4012
4013   .. audit-event:: os.posix_spawn path,argv,env os.posix_spawnp
4014
4015   .. versionadded:: 3.8
4016
4017   .. availability:: See :func:`posix_spawn` documentation.
4018
4019
4020.. function:: register_at_fork(*, before=None, after_in_parent=None, \
4021                               after_in_child=None)
4022
4023   Register callables to be executed when a new child process is forked
4024   using :func:`os.fork` or similar process cloning APIs.
4025   The parameters are optional and keyword-only.
4026   Each specifies a different call point.
4027
4028   * *before* is a function called before forking a child process.
4029   * *after_in_parent* is a function called from the parent process
4030     after forking a child process.
4031   * *after_in_child* is a function called from the child process.
4032
4033   These calls are only made if control is expected to return to the
4034   Python interpreter.  A typical :mod:`subprocess` launch will not
4035   trigger them as the child is not going to re-enter the interpreter.
4036
4037   Functions registered for execution before forking are called in
4038   reverse registration order.  Functions registered for execution
4039   after forking (either in the parent or in the child) are called
4040   in registration order.
4041
4042   Note that :c:func:`fork` calls made by third-party C code may not
4043   call those functions, unless it explicitly calls :c:func:`PyOS_BeforeFork`,
4044   :c:func:`PyOS_AfterFork_Parent` and :c:func:`PyOS_AfterFork_Child`.
4045
4046   There is no way to unregister a function.
4047
4048   .. availability:: Unix.
4049
4050   .. versionadded:: 3.7
4051
4052
4053.. function:: spawnl(mode, path, ...)
4054              spawnle(mode, path, ..., env)
4055              spawnlp(mode, file, ...)
4056              spawnlpe(mode, file, ..., env)
4057              spawnv(mode, path, args)
4058              spawnve(mode, path, args, env)
4059              spawnvp(mode, file, args)
4060              spawnvpe(mode, file, args, env)
4061
4062   Execute the program *path* in a new process.
4063
4064   (Note that the :mod:`subprocess` module provides more powerful facilities for
4065   spawning new processes and retrieving their results; using that module is
4066   preferable to using these functions.  Check especially the
4067   :ref:`subprocess-replacements` section.)
4068
4069   If *mode* is :const:`P_NOWAIT`, this function returns the process id of the new
4070   process; if *mode* is :const:`P_WAIT`, returns the process's exit code if it
4071   exits normally, or ``-signal``, where *signal* is the signal that killed the
4072   process.  On Windows, the process id will actually be the process handle, so can
4073   be used with the :func:`waitpid` function.
4074
4075   Note on VxWorks, this function doesn't return ``-signal`` when the new process is
4076   killed. Instead it raises OSError exception.
4077
4078   The "l" and "v" variants of the :func:`spawn\* <spawnl>` functions differ in how
4079   command-line arguments are passed.  The "l" variants are perhaps the easiest
4080   to work with if the number of parameters is fixed when the code is written; the
4081   individual parameters simply become additional parameters to the
4082   :func:`spawnl\*` functions.  The "v" variants are good when the number of
4083   parameters is variable, with the arguments being passed in a list or tuple as
4084   the *args* parameter.  In either case, the arguments to the child process must
4085   start with the name of the command being run.
4086
4087   The variants which include a second "p" near the end (:func:`spawnlp`,
4088   :func:`spawnlpe`, :func:`spawnvp`, and :func:`spawnvpe`) will use the
4089   :envvar:`PATH` environment variable to locate the program *file*.  When the
4090   environment is being replaced (using one of the :func:`spawn\*e <spawnl>` variants,
4091   discussed in the next paragraph), the new environment is used as the source of
4092   the :envvar:`PATH` variable.  The other variants, :func:`spawnl`,
4093   :func:`spawnle`, :func:`spawnv`, and :func:`spawnve`, will not use the
4094   :envvar:`PATH` variable to locate the executable; *path* must contain an
4095   appropriate absolute or relative path.
4096
4097   For :func:`spawnle`, :func:`spawnlpe`, :func:`spawnve`, and :func:`spawnvpe`
4098   (note that these all end in "e"), the *env* parameter must be a mapping
4099   which is used to define the environment variables for the new process (they are
4100   used instead of the current process' environment); the functions
4101   :func:`spawnl`, :func:`spawnlp`, :func:`spawnv`, and :func:`spawnvp` all cause
4102   the new process to inherit the environment of the current process.  Note that
4103   keys and values in the *env* dictionary must be strings; invalid keys or
4104   values will cause the function to fail, with a return value of ``127``.
4105
4106   As an example, the following calls to :func:`spawnlp` and :func:`spawnvpe` are
4107   equivalent::
4108
4109      import os
4110      os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null')
4111
4112      L = ['cp', 'index.html', '/dev/null']
4113      os.spawnvpe(os.P_WAIT, 'cp', L, os.environ)
4114
4115   .. audit-event:: os.spawn mode,path,args,env os.spawnl
4116
4117   .. availability:: Unix, Windows.  :func:`spawnlp`, :func:`spawnlpe`, :func:`spawnvp`
4118      and :func:`spawnvpe` are not available on Windows.  :func:`spawnle` and
4119      :func:`spawnve` are not thread-safe on Windows; we advise you to use the
4120      :mod:`subprocess` module instead.
4121
4122   .. versionchanged:: 3.6
4123      Accepts a :term:`path-like object`.
4124
4125
4126.. data:: P_NOWAIT
4127          P_NOWAITO
4128
4129   Possible values for the *mode* parameter to the :func:`spawn\* <spawnl>` family of
4130   functions.  If either of these values is given, the :func:`spawn\*` functions
4131   will return as soon as the new process has been created, with the process id as
4132   the return value.
4133
4134   .. availability:: Unix, Windows.
4135
4136
4137.. data:: P_WAIT
4138
4139   Possible value for the *mode* parameter to the :func:`spawn\* <spawnl>` family of
4140   functions.  If this is given as *mode*, the :func:`spawn\*` functions will not
4141   return until the new process has run to completion and will return the exit code
4142   of the process the run is successful, or ``-signal`` if a signal kills the
4143   process.
4144
4145   .. availability:: Unix, Windows.
4146
4147
4148.. data:: P_DETACH
4149          P_OVERLAY
4150
4151   Possible values for the *mode* parameter to the :func:`spawn\* <spawnl>` family of
4152   functions.  These are less portable than those listed above. :const:`P_DETACH`
4153   is similar to :const:`P_NOWAIT`, but the new process is detached from the
4154   console of the calling process. If :const:`P_OVERLAY` is used, the current
4155   process will be replaced; the :func:`spawn\* <spawnl>` function will not return.
4156
4157   .. availability:: Windows.
4158
4159
4160.. function:: startfile(path, [operation], [arguments], [cwd], [show_cmd])
4161
4162   Start a file with its associated application.
4163
4164   When *operation* is not specified or ``'open'``, this acts like double-clicking
4165   the file in Windows Explorer, or giving the file name as an argument to the
4166   :program:`start` command from the interactive command shell: the file is opened
4167   with whatever application (if any) its extension is associated.
4168
4169   When another *operation* is given, it must be a "command verb" that specifies
4170   what should be done with the file. Common verbs documented by Microsoft are
4171   ``'print'`` and  ``'edit'`` (to be used on files) as well as ``'explore'`` and
4172   ``'find'`` (to be used on directories).
4173
4174   When launching an application, specify *arguments* to be passed as a single
4175   string. This argument may have no effect when using this function to launch a
4176   document.
4177
4178   The default working directory is inherited, but may be overridden by the *cwd*
4179   argument. This should be an absolute path. A relative *path* will be resolved
4180   against this argument.
4181
4182   Use *show_cmd* to override the default window style. Whether this has any
4183   effect will depend on the application being launched. Values are integers as
4184   supported by the Win32 :c:func:`ShellExecute` function.
4185
4186   :func:`startfile` returns as soon as the associated application is launched.
4187   There is no option to wait for the application to close, and no way to retrieve
4188   the application's exit status.  The *path* parameter is relative to the current
4189   directory or *cwd*.  If you want to use an absolute path, make sure the first
4190   character is not a slash (``'/'``)  Use :mod:`pathlib` or the
4191   :func:`os.path.normpath` function to ensure that paths are properly encoded for
4192   Win32.
4193
4194   To reduce interpreter startup overhead, the Win32 :c:func:`ShellExecute`
4195   function is not resolved until this function is first called.  If the function
4196   cannot be resolved, :exc:`NotImplementedError` will be raised.
4197
4198   .. audit-event:: os.startfile path,operation os.startfile
4199
4200   .. audit-event:: os.startfile/2 path,operation,arguments,cwd,show_cmd os.startfile
4201
4202   .. availability:: Windows.
4203
4204   .. versionchanged:: 3.10
4205      Added the *arguments*, *cwd* and *show_cmd* arguments, and the
4206      ``os.startfile/2`` audit event.
4207
4208
4209.. function:: system(command)
4210
4211   Execute the command (a string) in a subshell.  This is implemented by calling
4212   the Standard C function :c:func:`system`, and has the same limitations.
4213   Changes to :data:`sys.stdin`, etc. are not reflected in the environment of
4214   the executed command. If *command* generates any output, it will be sent to
4215   the interpreter standard output stream. The C standard does not
4216   specify the meaning of the return value of the C function, so the return
4217   value of the Python function is system-dependent.
4218
4219   On Unix, the return value is the exit status of the process encoded in the
4220   format specified for :func:`wait`.
4221
4222   On Windows, the return value is that returned by the system shell after
4223   running *command*.  The shell is given by the Windows environment variable
4224   :envvar:`COMSPEC`: it is usually :program:`cmd.exe`, which returns the exit
4225   status of the command run; on systems using a non-native shell, consult your
4226   shell documentation.
4227
4228   The :mod:`subprocess` module provides more powerful facilities for spawning
4229   new processes and retrieving their results; using that module is preferable
4230   to using this function.  See the :ref:`subprocess-replacements` section in
4231   the :mod:`subprocess` documentation for some helpful recipes.
4232
4233   On Unix, :func:`waitstatus_to_exitcode` can be used to convert the result
4234   (exit status) into an exit code. On Windows, the result is directly the exit
4235   code.
4236
4237   .. audit-event:: os.system command os.system
4238
4239   .. availability:: Unix, Windows.
4240
4241
4242.. function:: times()
4243
4244   Returns the current global process times.
4245   The return value is an object with five attributes:
4246
4247   * :attr:`!user` - user time
4248   * :attr:`!system` - system time
4249   * :attr:`!children_user` - user time of all child processes
4250   * :attr:`!children_system` - system time of all child processes
4251   * :attr:`!elapsed` - elapsed real time since a fixed point in the past
4252
4253   For backwards compatibility, this object also behaves like a five-tuple
4254   containing :attr:`!user`, :attr:`!system`, :attr:`!children_user`,
4255   :attr:`!children_system`, and :attr:`!elapsed` in that order.
4256
4257   See the Unix manual page
4258   :manpage:`times(2)` and :manpage:`times(3)` manual page on Unix or `the GetProcessTimes MSDN
4259   <https://docs.microsoft.com/windows/win32/api/processthreadsapi/nf-processthreadsapi-getprocesstimes>`_
4260   on Windows. On Windows, only :attr:`!user` and :attr:`!system` are known; the other attributes are zero.
4261
4262   .. availability:: Unix, Windows.
4263
4264   .. versionchanged:: 3.3
4265      Return type changed from a tuple to a tuple-like object
4266      with named attributes.
4267
4268
4269.. function:: wait()
4270
4271   Wait for completion of a child process, and return a tuple containing its pid
4272   and exit status indication: a 16-bit number, whose low byte is the signal number
4273   that killed the process, and whose high byte is the exit status (if the signal
4274   number is zero); the high bit of the low byte is set if a core file was
4275   produced.
4276
4277   :func:`waitstatus_to_exitcode` can be used to convert the exit status into an
4278   exit code.
4279
4280   .. availability:: Unix.
4281
4282   .. seealso::
4283
4284      :func:`waitpid` can be used to wait for the completion of a specific
4285      child process and has more options.
4286
4287.. function:: waitid(idtype, id, options)
4288
4289   Wait for the completion of one or more child processes.
4290   *idtype* can be :data:`P_PID`, :data:`P_PGID`, :data:`P_ALL`, or
4291   :data:`P_PIDFD` on Linux.
4292   *id* specifies the pid to wait on.
4293   *options* is constructed from the ORing of one or more of :data:`WEXITED`,
4294   :data:`WSTOPPED` or :data:`WCONTINUED` and additionally may be ORed with
4295   :data:`WNOHANG` or :data:`WNOWAIT`. The return value is an object
4296   representing the data contained in the :c:type:`siginfo_t` structure, namely:
4297   :attr:`si_pid`, :attr:`si_uid`, :attr:`si_signo`, :attr:`si_status`,
4298   :attr:`si_code` or ``None`` if :data:`WNOHANG` is specified and there are no
4299   children in a waitable state.
4300
4301   .. availability:: Unix.
4302
4303   .. versionadded:: 3.3
4304
4305.. data:: P_PID
4306          P_PGID
4307          P_ALL
4308
4309   These are the possible values for *idtype* in :func:`waitid`. They affect
4310   how *id* is interpreted.
4311
4312   .. availability:: Unix.
4313
4314   .. versionadded:: 3.3
4315
4316.. data:: P_PIDFD
4317
4318   This is a Linux-specific *idtype* that indicates that *id* is a file
4319   descriptor that refers to a process.
4320
4321   .. availability:: Linux 5.4+
4322
4323   .. versionadded:: 3.9
4324
4325.. data:: WEXITED
4326          WSTOPPED
4327          WNOWAIT
4328
4329   Flags that can be used in *options* in :func:`waitid` that specify what
4330   child signal to wait for.
4331
4332   .. availability:: Unix.
4333
4334   .. versionadded:: 3.3
4335
4336
4337.. data:: CLD_EXITED
4338          CLD_KILLED
4339          CLD_DUMPED
4340          CLD_TRAPPED
4341          CLD_STOPPED
4342          CLD_CONTINUED
4343
4344   These are the possible values for :attr:`si_code` in the result returned by
4345   :func:`waitid`.
4346
4347   .. availability:: Unix.
4348
4349   .. versionadded:: 3.3
4350
4351   .. versionchanged:: 3.9
4352      Added :data:`CLD_KILLED` and :data:`CLD_STOPPED` values.
4353
4354
4355.. function:: waitpid(pid, options)
4356
4357   The details of this function differ on Unix and Windows.
4358
4359   On Unix: Wait for completion of a child process given by process id *pid*, and
4360   return a tuple containing its process id and exit status indication (encoded as
4361   for :func:`wait`).  The semantics of the call are affected by the value of the
4362   integer *options*, which should be ``0`` for normal operation.
4363
4364   If *pid* is greater than ``0``, :func:`waitpid` requests status information for
4365   that specific process.  If *pid* is ``0``, the request is for the status of any
4366   child in the process group of the current process.  If *pid* is ``-1``, the
4367   request pertains to any child of the current process.  If *pid* is less than
4368   ``-1``, status is requested for any process in the process group ``-pid`` (the
4369   absolute value of *pid*).
4370
4371   An :exc:`OSError` is raised with the value of errno when the syscall
4372   returns -1.
4373
4374   On Windows: Wait for completion of a process given by process handle *pid*, and
4375   return a tuple containing *pid*, and its exit status shifted left by 8 bits
4376   (shifting makes cross-platform use of the function easier). A *pid* less than or
4377   equal to ``0`` has no special meaning on Windows, and raises an exception. The
4378   value of integer *options* has no effect. *pid* can refer to any process whose
4379   id is known, not necessarily a child process. The :func:`spawn\* <spawnl>`
4380   functions called with :const:`P_NOWAIT` return suitable process handles.
4381
4382   :func:`waitstatus_to_exitcode` can be used to convert the exit status into an
4383   exit code.
4384
4385   .. versionchanged:: 3.5
4386      If the system call is interrupted and the signal handler does not raise an
4387      exception, the function now retries the system call instead of raising an
4388      :exc:`InterruptedError` exception (see :pep:`475` for the rationale).
4389
4390
4391.. function:: wait3(options)
4392
4393   Similar to :func:`waitpid`, except no process id argument is given and a
4394   3-element tuple containing the child's process id, exit status indication,
4395   and resource usage information is returned.  Refer to
4396   :mod:`resource`.\ :func:`~resource.getrusage` for details on resource usage
4397   information.  The option argument is the same as that provided to
4398   :func:`waitpid` and :func:`wait4`.
4399
4400   :func:`waitstatus_to_exitcode` can be used to convert the exit status into an
4401   exitcode.
4402
4403   .. availability:: Unix.
4404
4405
4406.. function:: wait4(pid, options)
4407
4408   Similar to :func:`waitpid`, except a 3-element tuple, containing the child's
4409   process id, exit status indication, and resource usage information is returned.
4410   Refer to :mod:`resource`.\ :func:`~resource.getrusage` for details on
4411   resource usage information.  The arguments to :func:`wait4` are the same
4412   as those provided to :func:`waitpid`.
4413
4414   :func:`waitstatus_to_exitcode` can be used to convert the exit status into an
4415   exitcode.
4416
4417   .. availability:: Unix.
4418
4419
4420.. function:: waitstatus_to_exitcode(status)
4421
4422   Convert a wait status to an exit code.
4423
4424   On Unix:
4425
4426   * If the process exited normally (if ``WIFEXITED(status)`` is true),
4427     return the process exit status (return ``WEXITSTATUS(status)``):
4428     result greater than or equal to 0.
4429   * If the process was terminated by a signal (if ``WIFSIGNALED(status)`` is
4430     true), return ``-signum`` where *signum* is the number of the signal that
4431     caused the process to terminate (return ``-WTERMSIG(status)``):
4432     result less than 0.
4433   * Otherwise, raise a :exc:`ValueError`.
4434
4435   On Windows, return *status* shifted right by 8 bits.
4436
4437   On Unix, if the process is being traced or if :func:`waitpid` was called
4438   with :data:`WUNTRACED` option, the caller must first check if
4439   ``WIFSTOPPED(status)`` is true. This function must not be called if
4440   ``WIFSTOPPED(status)`` is true.
4441
4442   .. seealso::
4443
4444      :func:`WIFEXITED`, :func:`WEXITSTATUS`, :func:`WIFSIGNALED`,
4445      :func:`WTERMSIG`, :func:`WIFSTOPPED`, :func:`WSTOPSIG` functions.
4446
4447   .. versionadded:: 3.9
4448
4449
4450.. data:: WNOHANG
4451
4452   The option for :func:`waitpid` to return immediately if no child process status
4453   is available immediately. The function returns ``(0, 0)`` in this case.
4454
4455   .. availability:: Unix.
4456
4457
4458.. data:: WCONTINUED
4459
4460   This option causes child processes to be reported if they have been continued
4461   from a job control stop since their status was last reported.
4462
4463   .. availability:: some Unix systems.
4464
4465
4466.. data:: WUNTRACED
4467
4468   This option causes child processes to be reported if they have been stopped but
4469   their current state has not been reported since they were stopped.
4470
4471   .. availability:: Unix.
4472
4473
4474The following functions take a process status code as returned by
4475:func:`system`, :func:`wait`, or :func:`waitpid` as a parameter.  They may be
4476used to determine the disposition of a process.
4477
4478.. function:: WCOREDUMP(status)
4479
4480   Return ``True`` if a core dump was generated for the process, otherwise
4481   return ``False``.
4482
4483   This function should be employed only if :func:`WIFSIGNALED` is true.
4484
4485   .. availability:: Unix.
4486
4487
4488.. function:: WIFCONTINUED(status)
4489
4490   Return ``True`` if a stopped child has been resumed by delivery of
4491   :data:`~signal.SIGCONT` (if the process has been continued from a job
4492   control stop), otherwise return ``False``.
4493
4494   See :data:`WCONTINUED` option.
4495
4496   .. availability:: Unix.
4497
4498
4499.. function:: WIFSTOPPED(status)
4500
4501   Return ``True`` if the process was stopped by delivery of a signal,
4502   otherwise return ``False``.
4503
4504   :func:`WIFSTOPPED` only returns ``True`` if the :func:`waitpid` call was
4505   done using :data:`WUNTRACED` option or when the process is being traced (see
4506   :manpage:`ptrace(2)`).
4507
4508   .. availability:: Unix.
4509
4510.. function:: WIFSIGNALED(status)
4511
4512   Return ``True`` if the process was terminated by a signal, otherwise return
4513   ``False``.
4514
4515   .. availability:: Unix.
4516
4517
4518.. function:: WIFEXITED(status)
4519
4520   Return ``True`` if the process exited terminated normally, that is,
4521   by calling ``exit()`` or ``_exit()``, or by returning from ``main()``;
4522   otherwise return ``False``.
4523
4524   .. availability:: Unix.
4525
4526
4527.. function:: WEXITSTATUS(status)
4528
4529   Return the process exit status.
4530
4531   This function should be employed only if :func:`WIFEXITED` is true.
4532
4533   .. availability:: Unix.
4534
4535
4536.. function:: WSTOPSIG(status)
4537
4538   Return the signal which caused the process to stop.
4539
4540   This function should be employed only if :func:`WIFSTOPPED` is true.
4541
4542   .. availability:: Unix.
4543
4544
4545.. function:: WTERMSIG(status)
4546
4547   Return the number of the signal that caused the process to terminate.
4548
4549   This function should be employed only if :func:`WIFSIGNALED` is true.
4550
4551   .. availability:: Unix.
4552
4553
4554Interface to the scheduler
4555--------------------------
4556
4557These functions control how a process is allocated CPU time by the operating
4558system. They are only available on some Unix platforms. For more detailed
4559information, consult your Unix manpages.
4560
4561.. versionadded:: 3.3
4562
4563The following scheduling policies are exposed if they are supported by the
4564operating system.
4565
4566.. data:: SCHED_OTHER
4567
4568   The default scheduling policy.
4569
4570.. data:: SCHED_BATCH
4571
4572   Scheduling policy for CPU-intensive processes that tries to preserve
4573   interactivity on the rest of the computer.
4574
4575.. data:: SCHED_IDLE
4576
4577   Scheduling policy for extremely low priority background tasks.
4578
4579.. data:: SCHED_SPORADIC
4580
4581   Scheduling policy for sporadic server programs.
4582
4583.. data:: SCHED_FIFO
4584
4585   A First In First Out scheduling policy.
4586
4587.. data:: SCHED_RR
4588
4589   A round-robin scheduling policy.
4590
4591.. data:: SCHED_RESET_ON_FORK
4592
4593   This flag can be OR'ed with any other scheduling policy. When a process with
4594   this flag set forks, its child's scheduling policy and priority are reset to
4595   the default.
4596
4597
4598.. class:: sched_param(sched_priority)
4599
4600   This class represents tunable scheduling parameters used in
4601   :func:`sched_setparam`, :func:`sched_setscheduler`, and
4602   :func:`sched_getparam`. It is immutable.
4603
4604   At the moment, there is only one possible parameter:
4605
4606   .. attribute:: sched_priority
4607
4608      The scheduling priority for a scheduling policy.
4609
4610
4611.. function:: sched_get_priority_min(policy)
4612
4613   Get the minimum priority value for *policy*. *policy* is one of the
4614   scheduling policy constants above.
4615
4616
4617.. function:: sched_get_priority_max(policy)
4618
4619   Get the maximum priority value for *policy*. *policy* is one of the
4620   scheduling policy constants above.
4621
4622
4623.. function:: sched_setscheduler(pid, policy, param)
4624
4625   Set the scheduling policy for the process with PID *pid*. A *pid* of 0 means
4626   the calling process. *policy* is one of the scheduling policy constants
4627   above. *param* is a :class:`sched_param` instance.
4628
4629
4630.. function:: sched_getscheduler(pid)
4631
4632   Return the scheduling policy for the process with PID *pid*. A *pid* of 0
4633   means the calling process. The result is one of the scheduling policy
4634   constants above.
4635
4636
4637.. function:: sched_setparam(pid, param)
4638
4639   Set the scheduling parameters for the process with PID *pid*. A *pid* of 0 means
4640   the calling process. *param* is a :class:`sched_param` instance.
4641
4642
4643.. function:: sched_getparam(pid)
4644
4645   Return the scheduling parameters as a :class:`sched_param` instance for the
4646   process with PID *pid*. A *pid* of 0 means the calling process.
4647
4648
4649.. function:: sched_rr_get_interval(pid)
4650
4651   Return the round-robin quantum in seconds for the process with PID *pid*. A
4652   *pid* of 0 means the calling process.
4653
4654
4655.. function:: sched_yield()
4656
4657   Voluntarily relinquish the CPU.
4658
4659
4660.. function:: sched_setaffinity(pid, mask)
4661
4662   Restrict the process with PID *pid* (or the current process if zero) to a
4663   set of CPUs.  *mask* is an iterable of integers representing the set of
4664   CPUs to which the process should be restricted.
4665
4666
4667.. function:: sched_getaffinity(pid)
4668
4669   Return the set of CPUs the process with PID *pid* (or the current process
4670   if zero) is restricted to.
4671
4672
4673.. _os-path:
4674
4675Miscellaneous System Information
4676--------------------------------
4677
4678
4679.. function:: confstr(name)
4680
4681   Return string-valued system configuration values. *name* specifies the
4682   configuration value to retrieve; it may be a string which is the name of a
4683   defined system value; these names are specified in a number of standards (POSIX,
4684   Unix 95, Unix 98, and others).  Some platforms define additional names as well.
4685   The names known to the host operating system are given as the keys of the
4686   ``confstr_names`` dictionary.  For configuration variables not included in that
4687   mapping, passing an integer for *name* is also accepted.
4688
4689   If the configuration value specified by *name* isn't defined, ``None`` is
4690   returned.
4691
4692   If *name* is a string and is not known, :exc:`ValueError` is raised.  If a
4693   specific value for *name* is not supported by the host system, even if it is
4694   included in ``confstr_names``, an :exc:`OSError` is raised with
4695   :const:`errno.EINVAL` for the error number.
4696
4697   .. availability:: Unix.
4698
4699
4700.. data:: confstr_names
4701
4702   Dictionary mapping names accepted by :func:`confstr` to the integer values
4703   defined for those names by the host operating system. This can be used to
4704   determine the set of names known to the system.
4705
4706   .. availability:: Unix.
4707
4708
4709.. function:: cpu_count()
4710
4711   Return the number of CPUs in the system. Returns ``None`` if undetermined.
4712
4713   This number is not equivalent to the number of CPUs the current process can
4714   use.  The number of usable CPUs can be obtained with
4715   ``len(os.sched_getaffinity(0))``
4716
4717
4718   .. versionadded:: 3.4
4719
4720
4721.. function:: getloadavg()
4722
4723   Return the number of processes in the system run queue averaged over the last
4724   1, 5, and 15 minutes or raises :exc:`OSError` if the load average was
4725   unobtainable.
4726
4727   .. availability:: Unix.
4728
4729
4730.. function:: sysconf(name)
4731
4732   Return integer-valued system configuration values. If the configuration value
4733   specified by *name* isn't defined, ``-1`` is returned.  The comments regarding
4734   the *name* parameter for :func:`confstr` apply here as well; the dictionary that
4735   provides information on the known names is given by ``sysconf_names``.
4736
4737   .. availability:: Unix.
4738
4739
4740.. data:: sysconf_names
4741
4742   Dictionary mapping names accepted by :func:`sysconf` to the integer values
4743   defined for those names by the host operating system. This can be used to
4744   determine the set of names known to the system.
4745
4746   .. availability:: Unix.
4747
4748The following data values are used to support path manipulation operations.  These
4749are defined for all platforms.
4750
4751Higher-level operations on pathnames are defined in the :mod:`os.path` module.
4752
4753
4754.. index:: single: . (dot); in pathnames
4755.. data:: curdir
4756
4757   The constant string used by the operating system to refer to the current
4758   directory. This is ``'.'`` for Windows and POSIX. Also available via
4759   :mod:`os.path`.
4760
4761
4762.. index:: single: ..; in pathnames
4763.. data:: pardir
4764
4765   The constant string used by the operating system to refer to the parent
4766   directory. This is ``'..'`` for Windows and POSIX. Also available via
4767   :mod:`os.path`.
4768
4769
4770.. index:: single: / (slash); in pathnames
4771.. index:: single: \ (backslash); in pathnames (Windows)
4772.. data:: sep
4773
4774   The character used by the operating system to separate pathname components.
4775   This is ``'/'`` for POSIX and ``'\\'`` for Windows.  Note that knowing this
4776   is not sufficient to be able to parse or concatenate pathnames --- use
4777   :func:`os.path.split` and :func:`os.path.join` --- but it is occasionally
4778   useful. Also available via :mod:`os.path`.
4779
4780
4781.. index:: single: / (slash); in pathnames
4782.. data:: altsep
4783
4784   An alternative character used by the operating system to separate pathname
4785   components, or ``None`` if only one separator character exists.  This is set to
4786   ``'/'`` on Windows systems where ``sep`` is a backslash. Also available via
4787   :mod:`os.path`.
4788
4789
4790.. index:: single: . (dot); in pathnames
4791.. data:: extsep
4792
4793   The character which separates the base filename from the extension; for example,
4794   the ``'.'`` in :file:`os.py`. Also available via :mod:`os.path`.
4795
4796
4797.. index:: single: : (colon); path separator (POSIX)
4798   single: ; (semicolon)
4799.. data:: pathsep
4800
4801   The character conventionally used by the operating system to separate search
4802   path components (as in :envvar:`PATH`), such as ``':'`` for POSIX or ``';'`` for
4803   Windows. Also available via :mod:`os.path`.
4804
4805
4806.. data:: defpath
4807
4808   The default search path used by :func:`exec\*p\* <execl>` and
4809   :func:`spawn\*p\* <spawnl>` if the environment doesn't have a ``'PATH'``
4810   key. Also available via :mod:`os.path`.
4811
4812
4813.. data:: linesep
4814
4815   The string used to separate (or, rather, terminate) lines on the current
4816   platform.  This may be a single character, such as ``'\n'`` for POSIX, or
4817   multiple characters, for example, ``'\r\n'`` for Windows. Do not use
4818   *os.linesep* as a line terminator when writing files opened in text mode (the
4819   default); use a single ``'\n'`` instead, on all platforms.
4820
4821
4822.. data:: devnull
4823
4824   The file path of the null device. For example: ``'/dev/null'`` for
4825   POSIX, ``'nul'`` for Windows.  Also available via :mod:`os.path`.
4826
4827.. data:: RTLD_LAZY
4828          RTLD_NOW
4829          RTLD_GLOBAL
4830          RTLD_LOCAL
4831          RTLD_NODELETE
4832          RTLD_NOLOAD
4833          RTLD_DEEPBIND
4834
4835   Flags for use with the :func:`~sys.setdlopenflags` and
4836   :func:`~sys.getdlopenflags` functions.  See the Unix manual page
4837   :manpage:`dlopen(3)` for what the different flags mean.
4838
4839   .. versionadded:: 3.3
4840
4841
4842Random numbers
4843--------------
4844
4845
4846.. function:: getrandom(size, flags=0)
4847
4848   Get up to *size* random bytes. The function can return less bytes than
4849   requested.
4850
4851   These bytes can be used to seed user-space random number generators or for
4852   cryptographic purposes.
4853
4854   ``getrandom()`` relies on entropy gathered from device drivers and other
4855   sources of environmental noise. Unnecessarily reading large quantities of
4856   data will have a negative impact on  other users  of the ``/dev/random`` and
4857   ``/dev/urandom`` devices.
4858
4859   The flags argument is a bit mask that can contain zero or more of the
4860   following values ORed together: :py:data:`os.GRND_RANDOM` and
4861   :py:data:`GRND_NONBLOCK`.
4862
4863   See also the `Linux getrandom() manual page
4864   <http://man7.org/linux/man-pages/man2/getrandom.2.html>`_.
4865
4866   .. availability:: Linux 3.17 and newer.
4867
4868   .. versionadded:: 3.6
4869
4870.. function:: urandom(size)
4871
4872   Return a string of *size* random bytes suitable for cryptographic use.
4873
4874   This function returns random bytes from an OS-specific randomness source.  The
4875   returned data should be unpredictable enough for cryptographic applications,
4876   though its exact quality depends on the OS implementation.
4877
4878   On Linux, if the ``getrandom()`` syscall is available, it is used in
4879   blocking mode: block until the system urandom entropy pool is initialized
4880   (128 bits of entropy are collected by the kernel). See the :pep:`524` for
4881   the rationale. On Linux, the :func:`getrandom` function can be used to get
4882   random bytes in non-blocking mode (using the :data:`GRND_NONBLOCK` flag) or
4883   to poll until the system urandom entropy pool is initialized.
4884
4885   On a Unix-like system, random bytes are read from the ``/dev/urandom``
4886   device. If the ``/dev/urandom`` device is not available or not readable, the
4887   :exc:`NotImplementedError` exception is raised.
4888
4889   On Windows, it will use ``CryptGenRandom()``.
4890
4891   .. seealso::
4892      The :mod:`secrets` module provides higher level functions. For an
4893      easy-to-use interface to the random number generator provided by your
4894      platform, please see :class:`random.SystemRandom`.
4895
4896   .. versionchanged:: 3.6.0
4897      On Linux, ``getrandom()`` is now used in blocking mode to increase the
4898      security.
4899
4900   .. versionchanged:: 3.5.2
4901      On Linux, if the ``getrandom()`` syscall blocks (the urandom entropy pool
4902      is not initialized yet), fall back on reading ``/dev/urandom``.
4903
4904   .. versionchanged:: 3.5
4905      On Linux 3.17 and newer, the ``getrandom()`` syscall is now used
4906      when available.  On OpenBSD 5.6 and newer, the C ``getentropy()``
4907      function is now used. These functions avoid the usage of an internal file
4908      descriptor.
4909
4910.. data:: GRND_NONBLOCK
4911
4912   By  default, when reading from ``/dev/random``, :func:`getrandom` blocks if
4913   no random bytes are available, and when reading from ``/dev/urandom``, it blocks
4914   if the entropy pool has not yet been initialized.
4915
4916   If the :py:data:`GRND_NONBLOCK` flag is set, then :func:`getrandom` does not
4917   block in these cases, but instead immediately raises :exc:`BlockingIOError`.
4918
4919   .. versionadded:: 3.6
4920
4921.. data:: GRND_RANDOM
4922
4923   If  this  bit  is  set,  then  random bytes are drawn from the
4924   ``/dev/random`` pool instead of the ``/dev/urandom`` pool.
4925
4926   .. versionadded:: 3.6
4927