8fe75cbebc15f06152631239993652fcd5adcdc0
[archive/20170607/tools/tic-core.git] / tic / utils / process.py
1 #!/usr/bin/python
2 # Copyright (c) 2000 - 2016 Samsung Electronics Co., Ltd. All rights reserved.
3 #
4 # Contact: 
5 # @author Chulwoo Shin <cw1.shin@samsung.com>
6
7 # Licensed under the Apache License, Version 2.0 (the "License");
8 # you may not use this file except in compliance with the License.
9 # You may obtain a copy of the License at
10 #
11 # http://www.apache.org/licenses/LICENSE-2.0
12 #
13 # Unless required by applicable law or agreed to in writing, software
14 # distributed under the License is distributed on an "AS IS" BASIS,
15 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 # See the License for the specific language governing permissions and
17 # limitations under the License.
18 #
19 # Contributors:
20 # - S-Core Co., Ltd
21
22 import subprocess
23 import logging
24
25 from tic.utils.error import TICError
26
27 def run(cmdln):
28     logger = logging.getLogger()
29     if isinstance(cmdln, list):
30         cmd = cmdln[0]
31         shellType = False
32     else:
33         import shlex
34         cmd = shlex.split(cmdln)[0]
35         shellType = True
36     
37     try:
38         p = subprocess.Popen(cmdln, 
39                              stdout=subprocess.PIPE,
40                              stderr=subprocess.PIPE,
41                              shell=shellType)
42         (sout, serr) = p.communicate()
43         out = ''.join(filter(None, [sout, serr]))
44         logger.info('subprocess open: %s', cmd)
45     except OSError as e:
46         if e.errno == 2:
47             # No such file or directory
48             raise TICError('Cannot run command: %s' % cmd)
49         else:
50             raise
51
52     return (p.returncode, out)
53