##// END OF EJS Templates
Backport PR #10634: fix of display() instantiates a shell in pure Python #10617
Backport PR #10634: fix of display() instantiates a shell in pure Python #10617

File last commit:

r21122:f42c9edb
r24103:99b670fc
Show More
process.py
106 lines | 2.9 KiB | text/x-python | PythonLexer
Brian Granger
Work to address the review comments on Fernando's branch....
r2498 # encoding: utf-8
"""
Utilities for working with external processes.
"""
Min RK
use py3compat.which in common locations
r21122 # Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
Fernando Perez
Fully refactored subprocess handling on all platforms....
r2908 from __future__ import print_function
Brian Granger
Work to address the review comments on Fernando's branch....
r2498
import os
import sys
Fernando Perez
Fully refactored subprocess handling on all platforms....
r2908 if sys.platform == 'win32':
Min RK
use py3compat.which in common locations
r21122 from ._process_win32 import system, getoutput, arg_split, check_pid
Doug Blank
Minimal changes to import IPython from IronPython
r15154 elif sys.platform == 'cli':
Min RK
use py3compat.which in common locations
r21122 from ._process_cli import system, getoutput, arg_split, check_pid
Fernando Perez
Fully refactored subprocess handling on all platforms....
r2908 else:
Min RK
use py3compat.which in common locations
r21122 from ._process_posix import system, getoutput, arg_split, check_pid
Jörgen Stenarson
Moved arg_split to _process_win32.py and _process_posix.py.
r5517
Paul Ivanov
initial test for the embedding
r14184 from ._process_common import getoutputerror, get_output_error_code, process_handler
Thomas Kluyver
Python 3 compatibility for os.getcwdu()
r13447 from . import py3compat
Brian Granger
Work to address the review comments on Fernando's branch....
r2498
class FindCmdError(Exception):
pass
def find_cmd(cmd):
"""Find absolute path to executable cmd in a cross platform manner.
Bernardo B. Marques
remove all trailling spaces
r4872
Brian Granger
Work to address the review comments on Fernando's branch....
r2498 This function tries to determine the full path to a command line program
using `which` on Unix/Linux/OS X and `win32api` on Windows. Most of the
MinRK
remove special case for 'python' in find_cmd
r10696 time it will use the version that is first on the users `PATH`.
Brian Granger
Work to address the review comments on Fernando's branch....
r2498
Warning, don't use this to find IPython command line programs as there
is a risk you will find the wrong one. Instead find those using the
following code and looking for the application itself::
Bernardo B. Marques
remove all trailling spaces
r4872
Brian Granger
Work to address the review comments on Fernando's branch....
r2498 from IPython.utils.path import get_ipython_module_path
from IPython.utils.process import pycmd2argv
Fernando Perez
Fix all remaining imports that used `IPython.frontend`.
r11024 argv = pycmd2argv(get_ipython_module_path('IPython.terminal.ipapp'))
Brian Granger
Work to address the review comments on Fernando's branch....
r2498
Parameters
----------
cmd : str
The command line program to look for.
"""
Min RK
use py3compat.which in common locations
r21122 path = py3compat.which(cmd)
if path is None:
Brian Granger
Work to address the review comments on Fernando's branch....
r2498 raise FindCmdError('command could not be found: %s' % cmd)
Min RK
use py3compat.which in common locations
r21122 return path
Brian Granger
Work to address the review comments on Fernando's branch....
r2498
Takafumi Arakaki
Add tests for IPython.lib.latextools
r7858 def is_cmd_found(cmd):
"""Check whether executable `cmd` exists or not and return a bool."""
try:
find_cmd(cmd)
return True
except FindCmdError:
return False
Brian Granger
Work to address the review comments on Fernando's branch....
r2498 def pycmd2argv(cmd):
r"""Take the path of a python command and return a list (argv-style).
This only works on Python based command line programs and will find the
location of the ``python`` executable using ``sys.executable`` to make
sure the right version is used.
For a given path ``cmd``, this returns [cmd] if cmd's extension is .exe,
Bernardo B. Marques
remove all trailling spaces
r4872 .com or .bat, and [, cmd] otherwise.
Brian Granger
Work to address the review comments on Fernando's branch....
r2498
Parameters
----------
cmd : string
The path of the command.
Returns
-------
argv-style list.
"""
ext = os.path.splitext(cmd)[1]
if ext in ['.exe', '.com', '.bat']:
return [cmd]
else:
Jörgen Stenarson
Removing unecessary checks for win32
r6141 return [sys.executable, cmd]
Brian Granger
Work to address the review comments on Fernando's branch....
r2498
def abbrev_cwd():
""" Return abbreviated version of cwd, e.g. d:mydir """
Thomas Kluyver
Python 3 compatibility for os.getcwdu()
r13447 cwd = py3compat.getcwd().replace('\\','/')
Brian Granger
Work to address the review comments on Fernando's branch....
r2498 drivepart = ''
tail = cwd
if sys.platform == 'win32':
if len(cwd) < 4:
return cwd
drivepart,tail = os.path.splitdrive(cwd)
parts = tail.split('/')
if len(parts) > 2:
tail = '/'.join(parts[-2:])
return (drivepart + (
cwd == '/' and '/' or tail))