Skip to content
Snippets Groups Projects
process_exec.py 2.83 KiB
Newer Older
mads's avatar
mads committed
'''
Created on 10/03/2014

@author: MMPE
'''
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from builtins import range
from builtins import str
from future import standard_library
standard_library.install_aliases()
mads's avatar
mads committed

import os
mads's avatar
mads committed

mads's avatar
mads committed

DEBUG = False
def pexec(args, cwd=None):
    """
    usage: errorcode, stdout, stderr, cmd = pexec("MyProgram.exe arg1, arg2", r"c:\tmp\")

    """
    import subprocess
    if not isinstance(args, (list, tuple)):
        args = [args]
    args = [str(arg) for arg in args]
    for i in range(len(args)):
        if os.path.exists(args[i]):
            args[i] = str(args[i]).replace('/', os.path.sep).replace('\\', os.path.sep).replace('"', '')

    cmd = "%s" % '{} /c "{}"'.format (os.environ.get("COMSPEC", "cmd.exe"), subprocess.list2cmdline(args))
    if os.path.isfile(cwd):
        cwd = os.path.dirname(cwd)
    proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, cwd=cwd)
    stdout, stderr = proc.communicate()
    errorcode = proc.returncode

mads's avatar
mads committed
    return errorcode, stdout.decode('cp1252'), stderr.decode('cp1252'), cmd
mads's avatar
mads committed


def process(args, cwd=None):
    import subprocess
    if not isinstance(args, (list, tuple)):
        args = [args]
    args = [str(arg) for arg in args]
    for i in range(len(args)):
        if os.path.exists(args[i]):
            args[i] = str(args[i]).replace('/', os.path.sep).replace('\\', os.path.sep).replace('"', '')

    cmd = "%s" % '{} /c "{}"'.format (os.environ.get("COMSPEC", "cmd.exe"), subprocess.list2cmdline(args))
    if cwd is not None and os.path.isfile(cwd):
        cwd = os.path.dirname(cwd)
    return subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False, cwd=cwd)

def exec_process(process):
    stdout, stderr = process.communicate()
    errorcode = process.returncode

    return errorcode, stdout.decode(), stderr.decode()

mads's avatar
mads committed
def unix_filename(filename):
    """Convert case insensitive filename into unix case sensitive filename

    I more than one case insensitive matching file or folder is found, case sensitive matching is used

    Parameters
    ---------
    x : str
        Case insensitive filename

    Returns
    -------
    Filename

    """
mads's avatar
mads committed
    filename = os.path.realpath(filename.replace("\\", "/")).replace("\\", "/")
mads's avatar
mads committed
    ufn, rest = os.path.splitdrive(filename)
    ufn += "/"
    for f in rest[1:].split("/"):
        f_lst = [f_ for f_ in os.listdir(ufn) if f_.lower() == f.lower()]
        if len(f_lst) > 1:
            f_lst = [f_ for f_ in f_lst if f_ == f]
        if len(f_lst) == 0:
            raise IOError("'%s' not found in '%s'" % (f, ufn))
        ufn = os.path.join(ufn, f_lst[0])
    return ufn.replace("\\", "/")

mads's avatar
mads committed