]> granicus.if.org Git - python/commitdiff
Merge: #19855: uuid.get_node now looks on the PATH for executables on unix.
authorR David Murray <rdmurray@bitdance.com>
Wed, 18 Dec 2013 02:14:41 +0000 (21:14 -0500)
committerR David Murray <rdmurray@bitdance.com>
Wed, 18 Dec 2013 02:14:41 +0000 (21:14 -0500)
1  2 
Lib/uuid.py
Misc/NEWS

diff --cc Lib/uuid.py
index 385fb9b0876fae93519e0e8377a7974f54267919,7705a8ad409d56c75bfb09c7b0fd2293c0c84386..694a8a9772dc7f10eb7077f9c14dd9ea74b010e0
@@@ -312,34 -312,35 +312,35 @@@ class UUID(object)
              return int((self.int >> 76) & 0xf)
  
  def _find_mac(command, args, hw_identifiers, get_index):
-     import os
-     for dir in ['', '/sbin/', '/usr/sbin']:
-         executable = os.path.join(dir, command)
-         if not os.path.exists(executable):
-             continue
-         try:
-             # LC_ALL to get English output, 2>/dev/null to
-             # prevent output on stderr
-             cmd = 'LC_ALL=C %s %s 2>/dev/null' % (executable, args)
-             with os.popen(cmd) as pipe:
-                 for line in pipe:
-                     words = line.lower().split()
-                     for i in range(len(words)):
-                         if words[i] in hw_identifiers:
-                             try:
-                                 return int(
-                                     words[get_index(i)].replace(':', ''), 16)
-                             except (ValueError, IndexError):
-                                 # Virtual interfaces, such as those provided by
-                                 # VPNs, do not have a colon-delimited MAC address
-                                 # as expected, but a 16-byte HWAddr separated by
-                                 # dashes. These should be ignored in favor of a
-                                 # real MAC address
-                                 pass
-         except OSError:
-             continue
-     return None
+     import os, shutil
+     executable = shutil.which(command)
+     if executable is None:
+         path = os.pathsep.join(('/sbin', '/usr/sbin'))
+         executable = shutil.which(command, path=path)
+         if executable is None:
+             return None
+     try:
+         # LC_MESSAGES to get English output, 2>/dev/null to
+         # prevent output on stderr
+         cmd = 'LC_MESSAGES=C %s %s 2>/dev/null' % (executable, args)
+         with os.popen(cmd) as pipe:
+             for line in pipe:
+                 words = line.lower().split()
+                 for i in range(len(words)):
+                     if words[i] in hw_identifiers:
+                         try:
+                             return int(
+                                 words[get_index(i)].replace(':', ''), 16)
+                         except (ValueError, IndexError):
+                             # Virtual interfaces, such as those provided by
+                             # VPNs, do not have a colon-delimited MAC address
+                             # as expected, but a 16-byte HWAddr separated by
+                             # dashes. These should be ignored in favor of a
+                             # real MAC address
+                             pass
 -    except IOError:
++    except OSError:
+         pass
  
  def _ifconfig_getnode():
      """Get the hardware address on Unix by running ifconfig."""
diff --cc Misc/NEWS
Simple merge