mirror of https://github.com/tLDP/python-tldp
adding function execute() to shell out
This commit is contained in:
parent
3f08105232
commit
73305ca97f
|
@ -5,11 +5,13 @@ from __future__ import absolute_import, division, print_function
|
|||
import os
|
||||
import io
|
||||
import sys
|
||||
import subprocess
|
||||
from tempfile import mkstemp
|
||||
import logging
|
||||
|
||||
|
||||
def getLogger(**opts):
|
||||
level = opts.get('level', logging.INFO)
|
||||
level = opts.get('level', logging.DEBUG)
|
||||
logging.basicConfig(stream=sys.stderr, level=level)
|
||||
logger = logging.getLogger()
|
||||
return logger
|
||||
|
@ -17,6 +19,33 @@ def getLogger(**opts):
|
|||
logger = getLogger()
|
||||
|
||||
|
||||
def execute(cmd, stdin=None, stdout=None, stderr=None,
|
||||
logdir=None, env=os.environ):
|
||||
prefix = os.path.basename(cmd[0]) + '.' + str(os.getpid()) + '-'
|
||||
|
||||
if logdir is None:
|
||||
raise Exception("Missing, required parameter: logdir.")
|
||||
assert os.path.isdir(logdir)
|
||||
|
||||
# -- not remapping STDIN, because that doesn't make sense here
|
||||
if stdout is None:
|
||||
stdout, stdoutname = mkstemp(prefix=prefix, suffix='.stdout',
|
||||
dir=logdir)
|
||||
if stderr is None:
|
||||
stderr, stderrname = mkstemp(prefix=prefix, suffix='.stderr',
|
||||
dir=logdir)
|
||||
|
||||
logger.debug("About to execute: %r", cmd)
|
||||
proc = subprocess.Popen(cmd, shell=False, close_fds=True,
|
||||
stdin=stdin, stdout=stdout, stderr=stderr,
|
||||
env=env, preexec_fn=os.setsid)
|
||||
result = proc.wait()
|
||||
if result != 0:
|
||||
logger.warning("Return code (%s) for process: %r", result, cmd)
|
||||
logger.warning("Find STDOUT/STDERR in %s/%s", logdir, prefix)
|
||||
return result
|
||||
|
||||
|
||||
def is_executable(fpath):
|
||||
return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
|
||||
|
||||
|
|
Loading…
Reference in New Issue