While browsing the Python standard library docs, in particular the module os.errno, I got the idea of writing this small utility to display os.errno error codes and error names, which are stored in the dict os.errno.errorcode:
Here is the program, os_errno_info.py:
from __future__ import print_function ''' os_errno_info.py To show the error codes and names from the os.errno module. Author: Vasudev Ram Copyright 2017 Vasudev Ram Web site: https://vasudevram.github.io Blog: https://jugad2.blogspot.com Product store: https://gumroad.com/vasudevram ''' import sys import os def main(): print("Showing error codes and names\nfrom the os.errno module:") print("Python sys.version:", sys.version[:6]) print("Number of error codes:", len(os.errno.errorcode)) print("{0:>4}{1:>8} {2:<20} {3:<}".format(\ "Idx", "Code", "Name", "Message")) for idx, key in enumerate(sorted(os.errno.errorcode)): print("{0:>4}{1:>8} {2:<20} {3:<}".format(\ idx, key, os.errno.errorcode[key], os.strerror(key))) if __name__ == '__main__': main()And here is the output on running it:
$ py -2 os_errno_info.py >out2 && gvim out2 Showing error codes and names from the os.errno module: Python sys.version: 2.7.12 Number of error codes: 86 Idx Code Name Message 0 1 EPERM Operation not permitted 1 2 ENOENT No such file or directory 2 3 ESRCH No such process 3 4 EINTR Interrupted function call 4 5 EIO Input/output error 5 6 ENXIO No such device or address 6 7 E2BIG Arg list too long 7 8 ENOEXEC Exec format error 8 9 EBADF Bad file descriptor 9 10 ECHILD No child processes 10 11 EAGAIN Resource temporarily unavailable 11 12 ENOMEM Not enough space 12 13 EACCES Permission denied 13 14 EFAULT Bad address 14 16 EBUSY Resource device 15 17 EEXIST File exists 16 18 EXDEV Improper link 17 19 ENODEV No such device 18 20 ENOTDIR Not a directory 19 21 EISDIR Is a directory 20 22 EINVAL Invalid argument 21 23 ENFILE Too many open files in system 22 24 EMFILE Too many open files 23 25 ENOTTY Inappropriate I/O control operation 24 27 EFBIG File too large 25 28 ENOSPC No space left on device 26 29 ESPIPE Invalid seek 27 30 EROFS Read-only file system 28 31 EMLINK Too many links 29 32 EPIPE Broken pipe 30 33 EDOM Domain error 31 34 ERANGE Result too large 32 36 EDEADLOCK Resource deadlock avoided 33 38 ENAMETOOLONG Filename too long 34 39 ENOLCK No locks available 35 40 ENOSYS Function not implemented 36 41 ENOTEMPTY Directory not empty 37 42 EILSEQ Illegal byte sequence 38 10000 WSABASEERR Unknown error 39 10004 WSAEINTR Unknown error 40 10009 WSAEBADF Unknown error 41 10013 WSAEACCES Unknown error 42 10014 WSAEFAULT Unknown error 43 10022 WSAEINVAL Unknown error 44 10024 WSAEMFILE Unknown error 45 10035 WSAEWOULDBLOCK Unknown error 46 10036 WSAEINPROGRESS Unknown error 47 10037 WSAEALREADY Unknown error 48 10038 WSAENOTSOCK Unknown error 49 10039 WSAEDESTADDRREQ Unknown error 50 10040 WSAEMSGSIZE Unknown error 51 10041 WSAEPROTOTYPE Unknown error 52 10042 WSAENOPROTOOPT Unknown error 53 10043 WSAEPROTONOSUPPORT Unknown error 54 10044 WSAESOCKTNOSUPPORT Unknown error 55 10045 WSAEOPNOTSUPP Unknown error 56 10046 WSAEPFNOSUPPORT Unknown error 57 10047 WSAEAFNOSUPPORT Unknown error 58 10048 WSAEADDRINUSE Unknown error 59 10049 WSAEADDRNOTAVAIL Unknown error 60 10050 WSAENETDOWN Unknown error 61 10051 WSAENETUNREACH Unknown error 62 10052 WSAENETRESET Unknown error 63 10053 WSAECONNABORTED Unknown error 64 10054 WSAECONNRESET Unknown error 65 10055 WSAENOBUFS Unknown error 66 10056 WSAEISCONN Unknown error 67 10057 WSAENOTCONN Unknown error 68 10058 WSAESHUTDOWN Unknown error 69 10059 WSAETOOMANYREFS Unknown error 70 10060 WSAETIMEDOUT Unknown error 71 10061 WSAECONNREFUSED Unknown error 72 10062 WSAELOOP Unknown error 73 10063 WSAENAMETOOLONG Unknown error 74 10064 WSAEHOSTDOWN Unknown error 75 10065 WSAEHOSTUNREACH Unknown error 76 10066 WSAENOTEMPTY Unknown error 77 10067 WSAEPROCLIM Unknown error 78 10068 WSAEUSERS Unknown error 79 10069 WSAEDQUOT Unknown error 80 10070 WSAESTALE Unknown error 81 10071 WSAEREMOTE Unknown error 82 10091 WSASYSNOTREADY Unknown error 83 10092 WSAVERNOTSUPPORTED Unknown error 84 10093 WSANOTINITIALISED Unknown error 85 10101 WSAEDISCON Unknown error
In the above Python command line, you can of course skip the "&& gvim out2" part. It is just there to automatically open the output file in gVim (text editor) after the utility runs.
The above output was from running it with Python 2.
The utility is written to also work with Python 3.
To change the command line to use Python 3, just change 2 to 3 everywhere in the above Python command :)
(You need to install or already have py, the Python Launcher for Windows, for the py command to work. If you don't have it, or are not on Windows, use python instead of py -2 or py -3 in the above python command line - after having set your OS PATH to point to Python 2 or Python 3 as wanted.)
The only differences in the output are the version message (2.x vs 3.x), and the number of error codes - 86 in Python 2 vs. 101 in Python 3.
Unix people will recognize many of the messages (EACCES, ENOENT, EBADF, etc.) as being familiar ones that you get while programming on Unix.
The error names starting with W are probably Windows-specific errors. Not sure how to get the messages for those, need to look it up. (It currently shows "Unknown error" for them.)
This above Python utility was inspired by an earlier auxiliary utility I wrote, called showsyserr.c, as part of my IBM developerWorks article, Developing a Linux command-line utility (not the main utility described in the article). Following (recursively) the link in the previous sentence will lead you to the code for both the auxiliary and the main utility, as well as the PDF version of the article.
Enjoy.
- Vasudev Ram - Online Python training and consulting Get updates (via Gumroad) on my forthcoming apps and content. Jump to posts: Python * DLang * xtopdf Subscribe to my blog by email My ActiveState Code recipesFollow me on: LinkedIn * Twitter Managed WordPress Hosting by FlyWheel
No comments:
Post a Comment