Changed runOsCommand() (returns in case of error - False, if successful - list)

develop
Самоукин Алексей 14 years ago
parent 9731b2e6e1
commit 01a81d2fcb

@ -753,14 +753,12 @@ storage of variables templates")%location)
class glob_attr: class glob_attr:
"""Глобальные аттрибуты для методов заполнения переменных""" """Глобальные аттрибуты для методов заполнения переменных"""
def _runos(self,cmd, ret_first=None, env={},ret_list=False): def _runos(self, cmd, env={}):
"""Вернуть результат выполнения команды ОС""" """Вернуть результат выполнения команды ОС"""
if not env: if not env:
envDict = {}
env.update(os.environ.items() + [("PATH",getpathenv())] +\ env.update(os.environ.items() + [("PATH",getpathenv())] +\
env.items()) env.items())
retCode, programOut = runOsCommand(cmd, None, ret_first, env, retCode, programOut = runOsCommand(cmd, None, env_dict=env)
ret_list)
if not retCode: if not retCode:
return programOut return programOut
return False return False

@ -270,7 +270,13 @@ class fillVars(glob_attr):
def get_os_net_domain(self): def get_os_net_domain(self):
'''Определим домен''' '''Определим домен'''
domain=self._runos("hostname -d 2>&1") textLines = self._runos("hostname -d 2>&1")
if textLines is False:
cl_overriding.printERROR(_("Error execute 'hostname -d'"))
cl_overriding.exit(1)
domain = ""
if textLines:
domain = textLines[0]
if not domain: if not domain:
cl_overriding.printERROR(_("Error:") + " " +\ cl_overriding.printERROR(_("Error:") + " " +\
_("Not found domain name")) _("Not found domain name"))
@ -382,7 +388,10 @@ class fillVars(glob_attr):
def get_from_uname(): def get_from_uname():
"""Get version from uname""" """Get version from uname"""
kernelVersion=self._runos("uname -r") textLines = self._runos("uname -r")
kernelVersion = ""
if textLines:
kernelVersion = textLines[0]
if kernelVersion: if kernelVersion:
return kernelVersion.partition("-")[0] return kernelVersion.partition("-")[0]
return get_from_metapackage() or get_from_calculate_ini() or \ return get_from_metapackage() or get_from_calculate_ini() or \
@ -390,18 +399,22 @@ class fillVars(glob_attr):
def get_os_net_hostname(self): def get_os_net_hostname(self):
'''Считать имя компьютера net_host''' '''Считать имя компьютера net_host'''
hostname=self._runos("hostname -s 2>&1") textLines = self._runos("hostname -s 2>&1")
if not hostname: hostname = ""
return "" if textLines:
if re.search("^hostname: ",hostname): hostname = textLines[0]
hostname=self._runos("hostname 2>&1")
if not hostname: if not hostname:
return "" return ""
if re.search("^hostname: ",hostname): if re.search("^hostname: ",hostname):
return self.Get('os_linux_shortname') textLines = self._runos("hostname 2>&1")
else: if not textLines:
if hostname=='livecd': return ""
hostname = textLines[0]
if re.search("^hostname: ",hostname):
return self.Get('os_linux_shortname') return self.Get('os_linux_shortname')
else:
if hostname=='livecd':
return self.Get('os_linux_shortname')
return hostname return hostname
# все ip # все ip
@ -465,9 +478,10 @@ class fillVars(glob_attr):
def get_os_arch_machine(self): def get_os_arch_machine(self):
"""архитектура процессора""" """архитектура процессора"""
march = self._runos("uname -m") textLines = self._runos("uname -m")
if not march: if not textLines:
return "" return ""
march = textLines[0]
return march return march
def get_os_root_dev(self): def get_os_root_dev(self):
@ -846,15 +860,16 @@ class fillVars(glob_attr):
def get_hr_laptop(self): def get_hr_laptop(self):
"""Если компьютер ноутбук, то его производитель""" """Если компьютер ноутбук, то его производитель"""
formfactor = self._runos("hal-get-property --udi \ textLines = self._runos("hal-get-property --udi \
/org/freedesktop/Hal/devices/computer --key system.formfactor") /org/freedesktop/Hal/devices/computer --key system.formfactor")
if not formfactor: if not textLines:
return "" return ""
formfactor = textLines[0]
if formfactor == 'laptop': if formfactor == 'laptop':
vendor = self._runos("hal-get-property --udi \ textLines = self._runos("hal-get-property --udi \
/org/freedesktop/Hal/devices/computer --key system.hardware.vendor") /org/freedesktop/Hal/devices/computer --key system.hardware.vendor")
if vendor: if textLines:
vendor = vendor.split(" ")[0] vendor = textLines[0].split(" ")[0]
else: else:
vendor = "unknown" vendor = "unknown"
return vendor.lower() return vendor.lower()

@ -248,17 +248,14 @@ class process:
"""Failed or not""" """Failed or not"""
return self.returncode() != 0 return self.returncode() != 0
def runOsCommand(cmd,inStr=None,ret_first=None,env_dict=None,ret_list=False): def runOsCommand(cmd,in_str=None, env_dict=None):
"""Выполняет внешнюю программу """Выполняет внешнюю программу
Параметры: Параметры:
cmd внешняя программа cmd внешняя программа
inStr данные передаваемые программе на страндартный вход. in_str данные передаваемые программе на страндартный вход.
ret_first вернуть только первую строку
env_dict словарь переменных окружения env_dict словарь переменных окружения
Возвращаемые параметры: Возвращает (код возврата, список stdout+stderr)
строка/строки которую выведет внешняя программа
Возвращает код возврата, stdout+stderr
""" """
pipe = subprocess.Popen(cmd, stdin=subprocess.PIPE, pipe = subprocess.Popen(cmd, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
@ -268,25 +265,16 @@ def runOsCommand(cmd,inStr=None,ret_first=None,env_dict=None,ret_list=False):
shell=True) shell=True)
fout, fin, ferr = (pipe.stdout, pipe.stdin, pipe.stderr) fout, fin, ferr = (pipe.stdout, pipe.stdin, pipe.stderr)
# если есть данные на вход, передать их # если есть данные на вход, передать их
if inStr: if in_str:
fin.write(inStr) fin.write(in_str)
fin.close() fin.close()
# Код возврата res = fout.read().split("\n")
retcode = pipe.wait()
res = fout.readlines()
fout.close() fout.close()
res += ferr.readlines() res += ferr.read().split("\n")
ferr.close() ferr.close()
if res: # Код возврата
if ret_list: retcode = pipe.wait()
if ret_first: return retcode, res
return retcode, res[:1]
return retcode, res
elif len(res) == 1 or ret_first:
return retcode, res[0].strip()
else:
return retcode, res
return retcode, None
def genpassword(passlen=9): def genpassword(passlen=9):
'''Вернуть случайный набор символов указанной длины '''Вернуть случайный набор символов указанной длины

@ -108,22 +108,22 @@ def rawInput(promptText="", inputText=""):
readline.set_pre_input_hook(None) readline.set_pre_input_hook(None)
return strInput return strInput
def execProg(cmdStrProg, inStr=False, retFull=True, envProg={}): def execProg(self, cmdStrProg, inStr=False, envProg={}):
"""Выполняет внешнюю программу """Выполняет внешнюю программу
Параметры: Параметры:
cmdStrProg внешняя программа cmdStrProg внешняя программа
inStr данные передаваемые программе на страндартный вход. inStr данные передаваемые программе на страндартный вход.
Возвращаемые параметры: Возвращаемые параметры:
строка которую выведет внешняя программа или False в случае ошибки строки которые выведет внешняя программа или False в случае ошибки
""" """
env_path = {"PATH":getpathenv()} env_path = {"PATH":getpathenv()}
env = {} env = {}
env.update(os.environ.items() + env_path.items() + envProg.items()) env.update(os.environ.items() + env_path.items() + envProg.items())
retCode,programOut = runOsCommand(cmdStrProg,inStr,retFull,env) retCode,programOut = runOsCommand(cmdStrProg,in_str=inStr,env_dict=env)
if not retCode: if not retCode:
return programOut return programOut
return False return False
def genSleep(timeSleep=(0.2, 0.4, 0.8)): def genSleep(timeSleep=(0.2, 0.4, 0.8)):
"""Генератор задержек""" """Генератор задержек"""

@ -131,7 +131,7 @@ class updateUserConfigs(shareUpdateConfigs):
retCode, resWho = runOsCommand("who") retCode, resWho = runOsCommand("who")
xUsers = [] xUsers = []
if retCode==0: if retCode==0:
if resWho and type(resWho) == list: if resWho:
xUsers = map(lambda x: x[0], xUsers = map(lambda x: x[0],
filter(lambda x: x[1].startswith(":"), filter(lambda x: x[1].startswith(":"),
map(lambda x: filter(lambda y: y, map(lambda x: filter(lambda y: y,

Loading…
Cancel
Save