blob: 01f74cc80b7948fb245cd056687fcb048c82bb99 [file] [log] [blame]
Kata7185c62013-04-04 17:31:13 +02001#!/usr/bin/env python
2
3# (C) 2013 by Katerina Barone-Adesi <kat.obsc@gmail.com>
4# This program is free software: you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation, either version 3 of the License, or
7# (at your option) any later version.
8
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
13
14# You should have received a copy of the GNU General Public License
15# along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17import subprocess
18import os
19import sys
20import importlib
Neels Hofmeyrb59b6772017-02-24 20:49:39 +010021import time
Kata7185c62013-04-04 17:31:13 +020022
23
24"""Run a command, with stdout and stderr directed to devnull"""
25
Neels Hofmeyrf6ab3d82017-02-24 20:49:51 +010026devnull = None
Kata7185c62013-04-04 17:31:13 +020027
Neels Hofmeyr3ef39e92017-02-24 20:49:27 +010028def popen_devnull(cmd, verbose=True):
Neels Hofmeyrf6ab3d82017-02-24 20:49:51 +010029 global devnull
30 if devnull is None:
31 if verbose:
32 print "Opening /dev/null"
33 devnull = open(os.devnull, 'w')
Neels Hofmeyr3ef39e92017-02-24 20:49:27 +010034 if verbose:
35 print "Launching: PWD=%s %s" % (os.getcwd(), ' '.join([repr(c) for c in cmd]))
Kata7185c62013-04-04 17:31:13 +020036 return subprocess.Popen(cmd, stdout=devnull, stderr=devnull)
37
38
39"""End a process.
40
41If the process doesn't appear to exist (for instance, is None), do nothing"""
42
43
44def end_proc(proc):
Neels Hofmeyrb59b6772017-02-24 20:49:39 +010045 if not proc:
46 return
47
48 proc.terminate()
49 time.sleep(.1)
50 rc = proc.poll()
51 if rc is not None:
52 print "Terminated child process"
53 else:
Kata7185c62013-04-04 17:31:13 +020054 proc.kill()
Neels Hofmeyrb59b6772017-02-24 20:49:39 +010055 print "Killed child process"
56 proc.wait()
Kata7185c62013-04-04 17:31:13 +020057
58
Kat0270be42013-04-05 21:34:52 +020059"""Add a directory to sys.path, try to import a config file."""
Kata7185c62013-04-04 17:31:13 +020060
Kat0270be42013-04-05 21:34:52 +020061def importappconf_or_quit(dirname, confname, p_set):
Kata7185c62013-04-04 17:31:13 +020062 if dirname not in sys.path:
63 sys.path.append(dirname)
Kat0270be42013-04-05 21:34:52 +020064 try:
65 return importlib.import_module(confname)
66 except ImportError as e:
67 if p_set:
68 print >> sys.stderr, "osmoappdesc not found in %s" % dirname
69 else:
70 print >> sys.stderr, "set osmoappdesc location with -p <dir>"
71 sys.exit(1)