3 # Copyright (C) 2010-2013 CEA/DEN
5 # This library is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU Lesser General Public
7 # License as published by the Free Software Foundation; either
8 # version 2.1 of the License.
10 # This library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # Lesser General Public License for more details.
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 In this file : all the stuff that can change with the architecture
21 on which SAT is running
24 import os, sys, platform
27 '''method that checks windows OS
31 return platform.system() == 'Windows'
34 '''method that gets the username that launched sat
38 # In windows case, the USERNAME environment variable has to be set
40 if not 'USERNAME' in os.environ:
41 raise Exception('USERNAME environment variable not set')
42 return os.environ['USERNAME']
45 return pwd.getpwuid(os.getuid())[0]
47 def _lsb_release(args):
48 '''Get system information with lsb_release.
50 :param args str: The arguments to give to lsb_release.
51 :return: The distribution.
55 path = '/usr/local/bin:/usr/bin:/bin'
56 lsb_path = os.getenv("LSB_PATH")
57 if lsb_path is not None:
58 path = lsb_path + ":" + path
60 from subprocess import Popen, PIPE
61 res = Popen(['lsb_release', args], env={'PATH': path},
62 stdout=PIPE).communicate()[0][:-1]
63 # in case of python3, convert byte to str
64 if isinstance(res, bytes):
68 sys.stderr.write(_(u"lsb_release not installed\n"))
69 sys.stderr.write(_(u"You can define $LSB_PATH to give"
70 " the path to lsb_release\n"))
73 def get_distribution(codes):
74 '''Gets the code for the distribution
76 :param codes L{Mapping}: The map containing distribution correlation table.
77 :return: The distribution on which salomeTools is running, regarding the
78 distribution correlation table contained in codes variable.
85 distrib = _lsb_release('-si')
86 if codes is not None and distrib in codes:
87 distrib = codes[distrib]
89 sys.stderr.write(_(u"Unknown distribution: '%s'\n") % distrib)
90 sys.stderr.write(_(u"Please add your distribution to"
91 " src/internal_config/distrib.pyconf\n"))
96 # Added by Lioka RAZAFINDRAZAKA
97 # <run_shell> and <get_infosys> functions are used to get info from shell command
98 def run_shell(sh_cmd, pipe=True):
100 if pipe: popen = subprocess.Popen(sh_cmd, shell=True, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
101 else: popen = subprocess.Popen(sh_cmd, shell=True, close_fds=True)
102 out_put = popen.communicate()
103 return out_put[0], out_put[1], popen.returncode
110 osys_value = "Unknown"
111 os_dict = {"mandrivalinux":"MD", "centos":"CO", "RedHatEnterpriseServer":"CO", "RedHatEnterpriseWorkstation":"CO", "fedora":"FD", "ubuntu":"UB", "debian":"DB", "mageia":"MG",}
112 lsb_cmd = "lsb_release -ds"
113 output, errdata, return_code = run_shell(lsb_cmd)
114 regexp = r"(^[0-9]+([.]?[0-9]+)+)"
115 for an_item in output.replace('"','').split():
116 if re.match(regexp, an_item) is not None and not version:
117 version = ".".join(an_item.split(".")[:2])
119 for sub_item in os_dict.keys():
120 if sub_item == an_item.lower():
122 osys_value = os_dict[sub_item]
123 if version and osys: break
125 architecture = platform.architecture()[0][:2]
126 infosys = "_".join([osys,version,architecture,"bits",socket.gethostname(),osys_value+version])
127 return version, infosys
129 def get_distrib_version(distrib, codes):
130 '''Gets the version of the distribution
132 :param distrib str: The distribution on which the version will be found.
133 :param codes L{Mapping}: The map containing distribution correlation table.
134 :return: The version of the distribution on which salomeTools is running,
135 regarding the distribution correlation table contained in codes
141 return platform.release()
143 # Call to lsb_release
144 version = _lsb_release('-sr')
146 if version in codes[distrib]:
147 version = codes[distrib][version]
150 version=version[0] #for centos, we only care for major version
153 def get_python_version():
154 '''Gets the version of the running python.
156 :return: the version of the running python.
160 # The platform python module gives the answer
161 return platform.python_version()
164 '''Gets the number of processors of the machine
165 on which salomeTools is running.
167 :return: the number of processors.
172 import multiprocessing
173 nb_proc=multiprocessing.cpu_count()
175 nb_proc=int(os.sysconf('SC_NPROCESSORS_ONLN'))