aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/ipython/py3/IPython/utils/_process_cli.py
blob: a8e2179cdb2c60dcc56f826c1486caaa41f04179 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
"""cli-specific implementation of process utilities. 
 
cli - Common Language Infrastructure for IronPython. Code 
      can run on any operating system. Check os.name for os- 
      specific settings. 
 
This file is only meant to be imported by process.py, not by end-users. 
 
This file is largely untested. To become a full drop-in process 
interface for IronPython will probably require you to help fill 
in the details.  
""" 
 
# Import cli libraries: 
import clr 
import System 
 
# Import Python libraries: 
import os 
 
# Import IPython libraries: 
from IPython.utils import py3compat 
from ._process_common import arg_split 
 
def _find_cmd(cmd): 
    """Find the full path to a command using which.""" 
    paths = System.Environment.GetEnvironmentVariable("PATH").Split(os.pathsep) 
    for path in paths: 
        filename = os.path.join(path, cmd) 
        if System.IO.File.Exists(filename): 
            return py3compat.decode(filename) 
    raise OSError("command %r not found" % cmd) 
 
def system(cmd): 
    """ 
    system(cmd) should work in a cli environment on Mac OSX, Linux, 
    and Windows 
    """ 
    psi = System.Diagnostics.ProcessStartInfo(cmd) 
    psi.RedirectStandardOutput = True 
    psi.RedirectStandardError = True 
    psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal 
    psi.UseShellExecute = False 
    # Start up process: 
    reg = System.Diagnostics.Process.Start(psi) 
 
def getoutput(cmd): 
    """ 
    getoutput(cmd) should work in a cli environment on Mac OSX, Linux, 
    and Windows 
    """ 
    psi = System.Diagnostics.ProcessStartInfo(cmd) 
    psi.RedirectStandardOutput = True 
    psi.RedirectStandardError = True 
    psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal 
    psi.UseShellExecute = False 
    # Start up process: 
    reg = System.Diagnostics.Process.Start(psi) 
    myOutput = reg.StandardOutput 
    output = myOutput.ReadToEnd() 
    myError = reg.StandardError 
    error = myError.ReadToEnd() 
    return output 
 
def check_pid(pid): 
    """ 
    Check if a process with the given PID (pid) exists 
    """ 
    try: 
        System.Diagnostics.Process.GetProcessById(pid) 
        # process with given pid is running 
        return True 
    except System.InvalidOperationException: 
        # process wasn't started by this object (but is running) 
        return True 
    except System.ArgumentException: 
        # process with given pid isn't running 
        return False