48 lines
1016 B
Python
48 lines
1016 B
Python
|
'''
|
||
|
Module of Linux API for plyer.uniqueid.
|
||
|
'''
|
||
|
|
||
|
from os import environ
|
||
|
from subprocess import Popen, PIPE
|
||
|
from plyer.facades import UniqueID
|
||
|
from plyer.utils import whereis_exe
|
||
|
|
||
|
|
||
|
class LinuxUniqueID(UniqueID):
|
||
|
'''
|
||
|
Implementation of Linux uniqueid API.
|
||
|
'''
|
||
|
|
||
|
def _get_uid(self):
|
||
|
old_lang = environ.get('LANG')
|
||
|
environ['LANG'] = 'C'
|
||
|
stdout = Popen(
|
||
|
["lshw", "-quiet"],
|
||
|
stdout=PIPE, stderr=PIPE
|
||
|
).communicate()[0].decode('utf-8')
|
||
|
|
||
|
output = u''
|
||
|
for line in stdout.splitlines():
|
||
|
if 'serial:' not in line:
|
||
|
continue
|
||
|
output = line
|
||
|
break
|
||
|
|
||
|
environ['LANG'] = old_lang or u''
|
||
|
result = None
|
||
|
|
||
|
if output:
|
||
|
result = output.split()[1]
|
||
|
return result
|
||
|
|
||
|
|
||
|
def instance():
|
||
|
'''
|
||
|
Instance for facade proxy.
|
||
|
'''
|
||
|
import sys
|
||
|
if whereis_exe('lshw'):
|
||
|
return LinuxUniqueID()
|
||
|
sys.stderr.write("lshw not found.")
|
||
|
return UniqueID()
|