1. 7f51a0332edd0c675c2d314ca3e62df7ef041281 deps/ipython (8.4.0-33-g7f51a0332)
215 lines
7.4 KiB
ReStructuredText
215 lines
7.4 KiB
ReStructuredText
|
|
.. note::
|
|
|
|
This page has been kept for historical reason. You most likely want to use
|
|
`Xonsh <https://xon.sh/>`__ instead of this.
|
|
|
|
.. _ipython_as_shell:
|
|
|
|
=========================
|
|
IPython as a system shell
|
|
=========================
|
|
|
|
|
|
|
|
Overview
|
|
========
|
|
|
|
It is possible to adapt IPython for system shell usage. In the past, IPython
|
|
shipped a special 'sh' profile for this purpose, but it had been quarantined
|
|
since 0.11 release, and in 1.0 it was removed altogether. Nevertheless, much
|
|
of this section relies on machinery which does not require a custom profile.
|
|
|
|
You can set up your own 'sh' :ref:`profile <Profiles>` to be different from
|
|
the default profile such that:
|
|
|
|
* Prompt shows the current directory (see `Prompt customization`_)
|
|
* Make system commands directly available (in alias table) by running the
|
|
``%rehashx`` magic. If you install new programs along your PATH, you might
|
|
want to run ``%rehashx`` to update the alias table
|
|
* turn ``%autocall`` to full mode
|
|
|
|
|
|
Environment variables
|
|
=====================
|
|
|
|
Rather than manipulating os.environ directly, you may like to use the magic
|
|
`%env` command. With no arguments, this displays all environment variables
|
|
and values. To get the value of a specific variable, use `%env var`. To set
|
|
the value of a specific variable, use `%env foo bar`, `%env foo=bar`. By
|
|
default values are considered to be strings so quoting them is unnecessary.
|
|
However, Python variables are expanded as usual in the magic command, so
|
|
`%env foo=$bar` means "set the environment variable foo to the value of the
|
|
Python variable `bar`".
|
|
|
|
Aliases
|
|
=======
|
|
|
|
Once you run ``%rehashx``, all of your $PATH has been loaded as IPython aliases,
|
|
so you should be able to type any normal system command and have it executed.
|
|
See ``%alias?`` and ``%unalias?`` for details on the alias facilities. See also
|
|
``%rehashx?`` for details on the mechanism used to load $PATH.
|
|
|
|
.. warning::
|
|
|
|
See info at the top of the page. You most likely want to use
|
|
`Xonsh <https://xon.sh/>`__ instead of this.
|
|
|
|
Directory management
|
|
====================
|
|
|
|
Since each command passed by IPython to the underlying system is executed
|
|
in a subshell which exits immediately, you can NOT use !cd to navigate
|
|
the filesystem.
|
|
|
|
IPython provides its own builtin ``%cd`` magic command to move in the
|
|
filesystem (the % is not required with automagic on). It also maintains
|
|
a list of visited directories (use ``%dhist`` to see it) and allows direct
|
|
switching to any of them. Type ``cd?`` for more details.
|
|
|
|
``%pushd``, ``%popd`` and ``%dirs`` are provided for directory stack handling.
|
|
|
|
|
|
Prompt customization
|
|
====================
|
|
|
|
See :ref:`custom_prompts`.
|
|
|
|
|
|
.. _string_lists:
|
|
|
|
String lists
|
|
============
|
|
|
|
String lists (IPython.utils.text.SList) are handy way to process output
|
|
from system commands. They are produced by ``var = !cmd`` syntax.
|
|
|
|
First, we acquire the output of 'ls -l'::
|
|
|
|
[Q:doc/examples]|2> lines = !ls -l
|
|
==
|
|
['total 23',
|
|
'-rw-rw-rw- 1 ville None 1163 Sep 30 2006 example-demo.py',
|
|
'-rw-rw-rw- 1 ville None 1927 Sep 30 2006 example-embed-short.py',
|
|
'-rwxrwxrwx 1 ville None 4606 Sep 1 17:15 example-embed.py',
|
|
'-rwxrwxrwx 1 ville None 1017 Sep 30 2006 example-gnuplot.py',
|
|
'-rwxrwxrwx 1 ville None 339 Jun 11 18:01 extension.py',
|
|
'-rwxrwxrwx 1 ville None 113 Dec 20 2006 seteditor.py',
|
|
'-rwxrwxrwx 1 ville None 245 Dec 12 2006 seteditor.pyc']
|
|
|
|
Now, let's take a look at the contents of 'lines' (the first number is
|
|
the list element number)::
|
|
|
|
[Q:doc/examples]|3> lines
|
|
<3> SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
|
|
|
|
0: total 23
|
|
1: -rw-rw-rw- 1 ville None 1163 Sep 30 2006 example-demo.py
|
|
2: -rw-rw-rw- 1 ville None 1927 Sep 30 2006 example-embed-short.py
|
|
3: -rwxrwxrwx 1 ville None 4606 Sep 1 17:15 example-embed.py
|
|
4: -rwxrwxrwx 1 ville None 1017 Sep 30 2006 example-gnuplot.py
|
|
5: -rwxrwxrwx 1 ville None 339 Jun 11 18:01 extension.py
|
|
6: -rwxrwxrwx 1 ville None 113 Dec 20 2006 seteditor.py
|
|
7: -rwxrwxrwx 1 ville None 245 Dec 12 2006 seteditor.pyc
|
|
|
|
Now, let's filter out the 'embed' lines::
|
|
|
|
[Q:doc/examples]|4> l2 = lines.grep('embed',prune=1)
|
|
[Q:doc/examples]|5> l2
|
|
<5> SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
|
|
|
|
0: total 23
|
|
1: -rw-rw-rw- 1 ville None 1163 Sep 30 2006 example-demo.py
|
|
2: -rwxrwxrwx 1 ville None 1017 Sep 30 2006 example-gnuplot.py
|
|
3: -rwxrwxrwx 1 ville None 339 Jun 11 18:01 extension.py
|
|
4: -rwxrwxrwx 1 ville None 113 Dec 20 2006 seteditor.py
|
|
5: -rwxrwxrwx 1 ville None 245 Dec 12 2006 seteditor.pyc
|
|
|
|
Now, we want strings having just file names and permissions::
|
|
|
|
[Q:doc/examples]|6> l2.fields(8,0)
|
|
<6> SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
|
|
|
|
0: total
|
|
1: example-demo.py -rw-rw-rw-
|
|
2: example-gnuplot.py -rwxrwxrwx
|
|
3: extension.py -rwxrwxrwx
|
|
4: seteditor.py -rwxrwxrwx
|
|
5: seteditor.pyc -rwxrwxrwx
|
|
|
|
Note how the line with 'total' does not raise IndexError.
|
|
|
|
If you want to split these (yielding lists), call fields() without
|
|
arguments::
|
|
|
|
[Q:doc/examples]|7> _.fields()
|
|
<7>
|
|
[['total'],
|
|
['example-demo.py', '-rw-rw-rw-'],
|
|
['example-gnuplot.py', '-rwxrwxrwx'],
|
|
['extension.py', '-rwxrwxrwx'],
|
|
['seteditor.py', '-rwxrwxrwx'],
|
|
['seteditor.pyc', '-rwxrwxrwx']]
|
|
|
|
If you want to pass these separated with spaces to a command (typical
|
|
for lists if files), use the .s property::
|
|
|
|
|
|
[Q:doc/examples]|13> files = l2.fields(8).s
|
|
[Q:doc/examples]|14> files
|
|
<14> 'example-demo.py example-gnuplot.py extension.py seteditor.py seteditor.pyc'
|
|
[Q:doc/examples]|15> ls $files
|
|
example-demo.py example-gnuplot.py extension.py seteditor.py seteditor.pyc
|
|
|
|
SLists are inherited from normal Python lists, so every list method is
|
|
available::
|
|
|
|
[Q:doc/examples]|21> lines.append('hey')
|
|
|
|
|
|
Real world example: remove all files outside version control
|
|
------------------------------------------------------------
|
|
|
|
First, capture output of "hg status"::
|
|
|
|
[Q:/ipython]|28> out = !hg status
|
|
==
|
|
['M IPython\\extensions\\ipy_kitcfg.py',
|
|
'M IPython\\extensions\\ipy_rehashdir.py',
|
|
...
|
|
'? build\\lib\\IPython\\Debugger.py',
|
|
'? build\\lib\\IPython\\extensions\\InterpreterExec.py',
|
|
'? build\\lib\\IPython\\extensions\\InterpreterPasteInput.py',
|
|
...
|
|
|
|
(lines starting with ? are not under version control).
|
|
|
|
::
|
|
|
|
[Q:/ipython]|35> junk = out.grep(r'^\?').fields(1)
|
|
[Q:/ipython]|36> junk
|
|
<36> SList (.p, .n, .l, .s, .grep(), .fields() availab
|
|
...
|
|
10: build\bdist.win32\winexe\temp\_ctypes.py
|
|
11: build\bdist.win32\winexe\temp\_hashlib.py
|
|
12: build\bdist.win32\winexe\temp\_socket.py
|
|
|
|
Now we can just remove these files by doing 'rm $junk.s'.
|
|
|
|
The .n, .s, .p properties
|
|
-------------------------
|
|
|
|
Properties of `SList <https://ipython.readthedocs.io/en/stable/api/generated/IPython.utils.text.html?highlight=SList#IPython.utils.text.SList>`_ wrapper
|
|
provide a convenient ways to use contained text in different formats:
|
|
|
|
* ``.n`` returns (original) string with lines separated by a newline
|
|
* ``.s`` returns string with lines separated by single space (for
|
|
convenient passing to system commands)
|
|
* ``.p`` returns list of "path" objects from detected file names
|
|
|
|
.. error::
|
|
|
|
You went too far scroll back up. You most likely want to use
|
|
`Xonsh <https://xon.sh/>`__ instead of this.
|
|
|