diff --git a/Doc/lib/libos.tex b/Doc/lib/libos.tex index 7fc7fabe6b6..73630e89f18 100644 --- a/Doc/lib/libos.tex +++ b/Doc/lib/libos.tex @@ -1808,3 +1808,11 @@ current platform. This may be a single character, such as \code{'\e n'} for \POSIX{} or \code{'\e r'} for Mac OS, or multiple characters, for example, \code{'\e r\e n'} for Windows. \end{datadesc} + +\begin{datadesc}{devnull} +The file path of the null device. +For example: \code{'/dev/null'} for \POSIX{} or \code{'Dev:Nul'} for the +Macintosh. +Also available via \module{os.path}. +\versionadded{2.4} +\end{datadesc} diff --git a/Lib/macpath.py b/Lib/macpath.py index 695fac91328..1d3fa564481 100644 --- a/Lib/macpath.py +++ b/Lib/macpath.py @@ -8,7 +8,7 @@ __all__ = ["normcase","isabs","join","splitdrive","split","splitext", "getatime","getctime", "islink","exists","isdir","isfile", "walk","expanduser","expandvars","normpath","abspath", "curdir","pardir","sep","pathsep","defpath","altsep","extsep", - "realpath","supports_unicode_filenames"] + "devnull","realpath","supports_unicode_filenames"] # strings representing various path-related bits and pieces curdir = ':' @@ -18,6 +18,7 @@ sep = ':' pathsep = '\n' defpath = ':' altsep = None +devnull = 'Dev:Null' # Normalize the case of a pathname. Dummy in Posix, but .lower() here. diff --git a/Lib/ntpath.py b/Lib/ntpath.py index 687d88513e2..549c35ea696 100644 --- a/Lib/ntpath.py +++ b/Lib/ntpath.py @@ -14,7 +14,7 @@ __all__ = ["normcase","isabs","join","splitdrive","split","splitext", "getatime","getctime", "islink","exists","isdir","isfile","ismount", "walk","expanduser","expandvars","normpath","abspath","splitunc", "curdir","pardir","sep","pathsep","defpath","altsep","extsep", - "realpath","supports_unicode_filenames"] + "devnull","realpath","supports_unicode_filenames"] # strings representing various path-related bits and pieces curdir = '.' @@ -29,6 +29,7 @@ if 'ce' in sys.builtin_module_names: elif 'os2' in sys.builtin_module_names: # OS/2 w/ VACPP altsep = '/' +devnull = 'nul' # Normalize the case of a pathname and map slashes to backslashes. # Other normalizations (such as optimizing '../' away) are not done diff --git a/Lib/os.py b/Lib/os.py index c037ea90c4f..5b79981dffe 100644 --- a/Lib/os.py +++ b/Lib/os.py @@ -12,6 +12,7 @@ This exports: - os.pathsep is the component separator used in $PATH etc - os.linesep is the line separator in text files ('\r' or '\n' or '\r\n') - os.defpath is the default search path for executables + - os.devnull is the file path of the null device ('/dev/null', etc.) Programs that import and use 'os' stand a better chance of being portable between different platforms. Of course, they must then @@ -28,7 +29,7 @@ _names = sys.builtin_module_names # Note: more names are added to __all__ later. __all__ = ["altsep", "curdir", "pardir", "sep", "pathsep", "linesep", - "defpath", "name", "path"] + "defpath", "name", "path", "devnull"] def _get_exports_list(module): try: @@ -129,7 +130,8 @@ else: raise ImportError, 'no os specific module found' sys.modules['os.path'] = path -from os.path import curdir, pardir, sep, pathsep, defpath, extsep, altsep +from os.path import curdir, pardir, sep, pathsep, defpath, extsep, altsep, \ + devnull del _names diff --git a/Lib/os2emxpath.py b/Lib/os2emxpath.py index 09982aadc16..9f8a1dd12c6 100644 --- a/Lib/os2emxpath.py +++ b/Lib/os2emxpath.py @@ -13,7 +13,7 @@ __all__ = ["normcase","isabs","join","splitdrive","split","splitext", "getatime","getctime", "islink","exists","isdir","isfile","ismount", "walk","expanduser","expandvars","normpath","abspath","splitunc", "curdir","pardir","sep","pathsep","defpath","altsep","extsep", - "realpath","supports_unicode_filenames"] + "devnull","realpath","supports_unicode_filenames"] # strings representing various path-related bits and pieces curdir = '.' @@ -23,6 +23,7 @@ sep = '/' altsep = '\\' pathsep = ';' defpath = '.;C:\\bin' +devnull = 'nul' # Normalize the case of a pathname and map slashes to backslashes. # Other normalizations (such as optimizing '../' away) are not done diff --git a/Lib/posixpath.py b/Lib/posixpath.py index dcd5a638c04..c117c899340 100644 --- a/Lib/posixpath.py +++ b/Lib/posixpath.py @@ -19,7 +19,7 @@ __all__ = ["normcase","isabs","join","splitdrive","split","splitext", "walk","expanduser","expandvars","normpath","abspath", "samefile","sameopenfile","samestat", "curdir","pardir","sep","pathsep","defpath","altsep","extsep", - "realpath","supports_unicode_filenames"] + "devnull","realpath","supports_unicode_filenames"] # strings representing various path-related bits and pieces curdir = '.' @@ -29,6 +29,7 @@ sep = '/' pathsep = ':' defpath = ':/bin:/usr/bin' altsep = None +devnull = '/dev/null' # Normalize the case of a pathname. Trivial in Posix, string.lower on Mac. # On MS-DOS this may also turn slashes into backslashes; however, other diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index 4cdc29db720..b05bffc438d 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -334,6 +334,14 @@ class MakedirTests (unittest.TestCase): os.removedirs(path) +class DevNullTests (unittest.TestCase): + def test_devnull(self): + f = file(os.devnull, 'w') + f.write('hello') + f.close() + f = file(os.devnull, 'r') + assert f.read() == '' + f.close() def test_main(): test_support.run_unittest( @@ -342,6 +350,7 @@ def test_main(): EnvironTests, WalkTests, MakedirTests, + DevNullTests, ) if __name__ == "__main__": diff --git a/Misc/NEWS b/Misc/NEWS index a07d887d18d..b7cf4b40b52 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -328,6 +328,8 @@ Extension modules Library ------- +- os.path.devnull has been added for all supported platforms. + - Fixed #877165: distutils now picks the right C++ compiler command on cygwin and mingw32.