"""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