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