@@ -296,6 +296,23 @@ def _parse_release_file(firstline):
296
296
id = l [1 ]
297
297
return '' , version , id
298
298
299
+ def _prase_os_release (os_release_file ):
300
+ params = ['NAME' , 'VERSION_ID' , 'ID' ]
301
+ vars_ = []
302
+ for line in os_release_file :
303
+ for param in params :
304
+ get_name = re .search (r'^' + param + '.*' , line )
305
+ index = params .index (param )
306
+ if get_name != None :
307
+ params [index ] = get_name .group (0 )
308
+ for param in params :
309
+ param_split = param .split ('=' )
310
+ if len (param_split ) > 1 :
311
+ vars_ .append (param_split [1 ])
312
+ else :
313
+ vars_ .append ('' )
314
+ return vars_ [0 ], vars_ [1 ], vars_ [2 ]
315
+
299
316
def linux_distribution (distname = '' , version = '' , id = '' ,
300
317
301
318
supported_dists = _supported_dists ,
@@ -333,16 +350,22 @@ def _linux_distribution(distname, version, id, supported_dists,
333
350
except OSError :
334
351
# Probably not a Unix system
335
352
return distname , version , id
336
- etc .sort ()
337
- for file in etc :
338
- m = _release_filename .match (file )
339
- if m is not None :
340
- _distname , dummy = m .groups ()
341
- if _distname in supported_dists :
342
- distname = _distname
343
- break
344
- else :
345
- return _dist_try_harder (distname , version , id )
353
+ try :
354
+ os_release_path = os .path .join (_UNIXCONFDIR , 'os-release' )
355
+ with open (os_release_path , 'r' , encoding = 'utf-8' ) as os_release_file :
356
+ distname , version , id = _prase_os_release (os_release_file )
357
+ return distname , version , id
358
+ except OSError :
359
+ etc .sort ()
360
+ for file in etc :
361
+ m = _release_filename .match (file )
362
+ if m is not None :
363
+ _distname , dummy = m .groups ()
364
+ if _distname in supported_dists :
365
+ distname = _distname
366
+ break
367
+ else :
368
+ return _dist_try_harder (distname , version , id )
346
369
347
370
# Read the first line
348
371
with open (os .path .join (_UNIXCONFDIR , file ), 'r' ,
0 commit comments