изменен метод запуска внешних команд.

develop
Самоукин Алексей 15 years ago
parent 6512461abb
commit 554bee32ce

@ -1025,8 +1025,14 @@ class DataVars(object):
############################################################################## ##############################################################################
class glob_attr: class glob_attr:
"""Глобальные аттрибуты для методов заполнения переменных""" """Глобальные аттрибуты для методов заполнения переменных"""
path_env = cl_utils.getpathenv()
def _runos(self,cmd,ret_first=None): def _runos(self,cmd, ret_first=None, env={}):
"""Вернуть результат выполнения команды ОС""" """Вернуть результат выполнения команды ОС"""
return cl_utils.runOsCommand(cmd, None, ret_first) if not env:
envDict = {}
env.update(os.environ.items() + [("PATH",cl_utils.getpathenv())] +\
env.items())
retCode, programOut = cl_utils.runOsCommand(cmd, None, ret_first, env)
if not retCode:
return programOut
return False

@ -24,7 +24,7 @@ class fillVars(object, cl_base.glob_attr):
def get_os_net_domain(self): def get_os_net_domain(self):
''' Определим домен''' ''' Определим домен'''
domain=self._runos("%s hostname -d 2>&1"%self.path_env) domain=self._runos("hostname -d 2>&1")
if not domain: if not domain:
print _("Error:") + " " +_("Not found domain name") print _("Error:") + " " +_("Not found domain name")
print _("Command 'hostname -d' returns an empty value") print _("Command 'hostname -d' returns an empty value")
@ -104,19 +104,20 @@ class fillVars(object, cl_base.glob_attr):
systemVersion = os.readlink(gentooLink).rpartition("/")[2] systemVersion = os.readlink(gentooLink).rpartition("/")[2]
flagGentoo = True flagGentoo = True
if not flagGentoo: if not flagGentoo:
kernelVersion=self._runos("%s uname -r"%self.path_env) kernelVersion=self._runos("uname -r")
if kernelVersion: if kernelVersion:
systemVersion = kernelVersion.partition("-")[0] systemVersion = kernelVersion.partition("-")[0]
return systemVersion return systemVersion
def get_os_net_hostname(self): def get_os_net_hostname(self):
'''Считать имя компьютера net_host''' '''Считать имя компьютера net_host'''
hostname=self._runos("""%s hostname -s 2>&1"""%self.path_env) hostname=self._runos("hostname -s 2>&1")
#Set('net_host',hostname, True) if not hostname:
#упрощенный вариант, следует выполнять только если не указан домен return ""
#в системе
if re.search("^hostname: ",hostname): if re.search("^hostname: ",hostname):
hostname=self._runos("""%s hostname 2>&1"""%self.path_env) hostname=self._runos("hostname 2>&1")
if not hostname:
return ""
if re.search("^hostname: ",hostname): if re.search("^hostname: ",hostname):
return self.Get('os_linux_shortname') return self.Get('os_linux_shortname')
else: else:
@ -134,8 +135,12 @@ class fillVars(object, cl_base.glob_attr):
'255.255.255.255':''} '255.255.255.255':''}
networks=[] networks=[]
netInterfaces=cl_utils.getdirlist("/sys/class/net/") netInterfaces=cl_utils.getdirlist("/sys/class/net/")
flagError = False
for i in netInterfaces: for i in netInterfaces:
res=self._runos("/sbin/ifconfig %s"%i) res = self._runos("/sbin/ifconfig %s"%i)
if not res:
flagError = True
break
for j in res: for j in res:
s_ip=re.search('addr:([0-9\.]+).+Bcast:.+Mask:([0-9\.]+)' ,j) s_ip=re.search('addr:([0-9\.]+).+Bcast:.+Mask:([0-9\.]+)' ,j)
if s_ip: if s_ip:
@ -157,6 +162,8 @@ class fillVars(object, cl_base.glob_attr):
net[netmask]) net[netmask])
elif netmask=='255.255.0.0': elif netmask=='255.255.0.0':
networks.append(ip[0]+"."+ip[1]+".0.0"+net[netmask]) networks.append(ip[0]+"."+ip[1]+".0.0"+net[netmask])
if flagError:
return ""
return ",".join(networks) return ",".join(networks)
def get_os_locale_locale(self): def get_os_locale_locale(self):
@ -247,7 +254,9 @@ class fillVars(object, cl_base.glob_attr):
def get_os_arch_machine(self): def get_os_arch_machine(self):
"""архитектура процессора""" """архитектура процессора"""
march = self._runos("""%s uname -m"""%self.path_env) march = self._runos("uname -m")
if not march:
return ""
return march return march
def get_os_root_dev(self): def get_os_root_dev(self):
@ -257,7 +266,9 @@ class fillVars(object, cl_base.glob_attr):
if re_res: if re_res:
return re_res.group(1) return re_res.group(1)
else: else:
mountLunes = self._runos("""%s mount"""%self.path_env) mountLunes = self._runos("mount")
if not mountLunes:
return ""
if type(mountLunes) == types.ListType: if type(mountLunes) == types.ListType:
root_dev = mountLunes[0].split("on / type")[0].strip() root_dev = mountLunes[0].split("on / type")[0].strip()
if root_dev: if root_dev:
@ -266,7 +277,9 @@ class fillVars(object, cl_base.glob_attr):
def get_os_root_type(self): def get_os_root_type(self):
"""тип носителя (ram, hdd, livecd)""" """тип носителя (ram, hdd, livecd)"""
mountLunes = self._runos("""%s mount"""%self.path_env) mountLunes = self._runos("mount")
if not mountLunes:
return ""
rootType = "hdd" rootType = "hdd"
if type(mountLunes) == types.ListType: if type(mountLunes) == types.ListType:
flagCD = False flagCD = False
@ -287,8 +300,10 @@ class fillVars(object, cl_base.glob_attr):
slpRootDev = rootDev.split("/dev/") slpRootDev = rootDev.split("/dev/")
if len(slpRootDev) == 2: if len(slpRootDev) == 2:
rDev = slpRootDev[1] rDev = slpRootDev[1]
devLines = self._runos("%s LANG=C ls -la /dev/disk/by-id/"\ devLines = self._runos("ls -la /dev/disk/by-id/", None,
%self.path_env) {"LANG":"C"})
if not devLines:
return ""
if type(devLines) == types.ListType: if type(devLines) == types.ListType:
for line in devLines: for line in devLines:
if rDev in line and "usb-" in line: if rDev in line and "usb-" in line:
@ -302,7 +317,9 @@ class fillVars(object, cl_base.glob_attr):
def get_hr_virtual(self): def get_hr_virtual(self):
"""Название виртуальной машины (virtualbox, vmware, qemu)""" """Название виртуальной машины (virtualbox, vmware, qemu)"""
pciLines = self._runos("""%s /usr/sbin/lspci"""%self.path_env) pciLines = self._runos("/usr/sbin/lspci")
if not pciLines:
return False
virtSysDict = {'VirtualBox':'virtualbox', virtSysDict = {'VirtualBox':'virtualbox',
'VMware':'vmware', 'VMware':'vmware',
'Qumranet':'qemu'} 'Qumranet':'qemu'}

@ -264,19 +264,22 @@ def justify(s,width):
# вернуть строку в utf8 если она пришла в utf8 # вернуть строку в utf8 если она пришла в utf8
return s.encode('utf-8') return s.encode('utf-8')
def runOsCommand(cmd, inStr=None, ret_first=None): def runOsCommand(cmd, inStr=None, ret_first=None, env_dict=None):
"""Выполняет внешнюю программу """Выполняет внешнюю программу
Параметры: Параметры:
cmd внешняя программа cmd внешняя программа
inStr данные передаваемые программе на страндартный вход. inStr данные передаваемые программе на страндартный вход.
ret_first вернуть только первую строку ret_first вернуть только первую строку
env_dict словарь переменных окружения
Возвращаемые параметры: Возвращаемые параметры:
строка/строки которую выведет внешняя программа строка/строки которую выведет внешняя программа
Возвращает код возврата, stdout+stderr
""" """
pipe = subprocess.Popen(cmd, stdin=subprocess.PIPE, pipe = subprocess.Popen(cmd, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, stderr=subprocess.PIPE,
env=env_dict,
close_fds=True, close_fds=True,
shell=True) shell=True)
fout, fin, ferr = (pipe.stdout, pipe.stdin, pipe.stderr) fout, fin, ferr = (pipe.stdout, pipe.stdin, pipe.stderr)
@ -288,15 +291,15 @@ def runOsCommand(cmd, inStr=None, ret_first=None):
fout.close() fout.close()
res += ferr.readlines() res += ferr.readlines()
ferr.close() ferr.close()
# Код возврата
retcode = pipe.wait()
if res: if res:
if len(res) > 1: if len(res) == 1 or ret_first:
if ret_first: return retcode, res[0].strip()
return res[0]
else:
return res
else: else:
return res[0].strip() return retcode, res
return retcode, None
def genpassword(passlen=9): def genpassword(passlen=9):
'''Вернуть случайный пассворд указанной длины '''Вернуть случайный пассворд указанной длины
@ -326,7 +329,7 @@ def getpathenv():
if os.path.exists(dirname) and dirname not in lpath: if os.path.exists(dirname) and dirname not in lpath:
npath.append(dirname) npath.append(dirname)
lpath=npath+lpath lpath=npath+lpath
return "PATH="+":".join(lpath)+" && " return ":".join(lpath)
#класс для работы с установленными пакетами #класс для работы с установленными пакетами
class pakages: class pakages:

@ -15,7 +15,6 @@
# limitations under the License. # limitations under the License.
import sys import sys
sys.path.append('/var/calculate2/calculate-lib/trunk/pym')
import struct import struct
import termios import termios
import fcntl import fcntl

Loading…
Cancel
Save