##// END OF EJS Templates
Merge pull request #11564 from techtonik/patch-3...
Matthias Bussonnier -
r24914:82b515da merge
parent child Browse files
Show More
@@ -1,198 +1,198 b''
1 1 .. _ipython_as_shell:
2 2
3 3 =========================
4 4 IPython as a system shell
5 5 =========================
6 6
7 7
8 8
9 9 Overview
10 10 ========
11 11
12 12 It is possible to adapt IPython for system shell usage. In the past, IPython
13 13 shipped a special 'sh' profile for this purpose, but it had been quarantined
14 14 since 0.11 release, and in 1.0 it was removed altogether. Nevertheless, much
15 15 of this section relies on machinery which does not require a custom profile.
16 16
17 17 You can set up your own 'sh' :ref:`profile <Profiles>` to be different from
18 18 the default profile such that:
19 19
20 20 * Prompt shows the current directory (see `Prompt customization`_)
21 21 * Make system commands directly available (in alias table) by running the
22 22 ``%rehashx`` magic. If you install new programs along your PATH, you might
23 23 want to run ``%rehashx`` to update the alias table
24 24 * turn ``%autocall`` to full mode
25 25
26 26
27 27 Environment variables
28 28 =====================
29 29
30 30 Rather than manipulating os.environ directly, you may like to use the magic
31 31 `%env` command. With no arguments, this displays all environment variables
32 32 and values. To get the value of a specific variable, use `%env var`. To set
33 33 the value of a specific variable, use `%env foo bar`, `%env foo=bar`. By
34 34 default values are considered to be strings so quoting them is unnecessary.
35 35 However, Python variables are expanded as usual in the magic command, so
36 36 `%env foo=$bar` means "set the environment variable foo to the value of the
37 37 Python variable `bar`".
38 38
39 39 Aliases
40 40 =======
41 41
42 42 Once you run ``%rehashx``, all of your $PATH has been loaded as IPython aliases,
43 43 so you should be able to type any normal system command and have it executed.
44 44 See ``%alias?`` and ``%unalias?`` for details on the alias facilities. See also
45 45 ``%rehashx?`` for details on the mechanism used to load $PATH.
46 46
47 47
48 48 Directory management
49 49 ====================
50 50
51 51 Since each command passed by IPython to the underlying system is executed
52 52 in a subshell which exits immediately, you can NOT use !cd to navigate
53 53 the filesystem.
54 54
55 55 IPython provides its own builtin ``%cd`` magic command to move in the
56 56 filesystem (the % is not required with automagic on). It also maintains
57 57 a list of visited directories (use ``%dhist`` to see it) and allows direct
58 58 switching to any of them. Type ``cd?`` for more details.
59 59
60 60 ``%pushd``, ``%popd`` and ``%dirs`` are provided for directory stack handling.
61 61
62 62
63 63 Prompt customization
64 64 ====================
65 65
66 66 See :ref:`custom_prompts`.
67 67
68 68
69 69 .. _string_lists:
70 70
71 71 String lists
72 72 ============
73 73
74 74 String lists (IPython.utils.text.SList) are handy way to process output
75 75 from system commands. They are produced by ``var = !cmd`` syntax.
76 76
77 77 First, we acquire the output of 'ls -l'::
78 78
79 79 [Q:doc/examples]|2> lines = !ls -l
80 80 ==
81 81 ['total 23',
82 82 '-rw-rw-rw- 1 ville None 1163 Sep 30 2006 example-demo.py',
83 83 '-rw-rw-rw- 1 ville None 1927 Sep 30 2006 example-embed-short.py',
84 84 '-rwxrwxrwx 1 ville None 4606 Sep 1 17:15 example-embed.py',
85 85 '-rwxrwxrwx 1 ville None 1017 Sep 30 2006 example-gnuplot.py',
86 86 '-rwxrwxrwx 1 ville None 339 Jun 11 18:01 extension.py',
87 87 '-rwxrwxrwx 1 ville None 113 Dec 20 2006 seteditor.py',
88 88 '-rwxrwxrwx 1 ville None 245 Dec 12 2006 seteditor.pyc']
89 89
90 90 Now, let's take a look at the contents of 'lines' (the first number is
91 91 the list element number)::
92 92
93 93 [Q:doc/examples]|3> lines
94 94 <3> SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
95 95
96 96 0: total 23
97 97 1: -rw-rw-rw- 1 ville None 1163 Sep 30 2006 example-demo.py
98 98 2: -rw-rw-rw- 1 ville None 1927 Sep 30 2006 example-embed-short.py
99 99 3: -rwxrwxrwx 1 ville None 4606 Sep 1 17:15 example-embed.py
100 100 4: -rwxrwxrwx 1 ville None 1017 Sep 30 2006 example-gnuplot.py
101 101 5: -rwxrwxrwx 1 ville None 339 Jun 11 18:01 extension.py
102 102 6: -rwxrwxrwx 1 ville None 113 Dec 20 2006 seteditor.py
103 103 7: -rwxrwxrwx 1 ville None 245 Dec 12 2006 seteditor.pyc
104 104
105 105 Now, let's filter out the 'embed' lines::
106 106
107 107 [Q:doc/examples]|4> l2 = lines.grep('embed',prune=1)
108 108 [Q:doc/examples]|5> l2
109 109 <5> SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
110 110
111 111 0: total 23
112 112 1: -rw-rw-rw- 1 ville None 1163 Sep 30 2006 example-demo.py
113 113 2: -rwxrwxrwx 1 ville None 1017 Sep 30 2006 example-gnuplot.py
114 114 3: -rwxrwxrwx 1 ville None 339 Jun 11 18:01 extension.py
115 115 4: -rwxrwxrwx 1 ville None 113 Dec 20 2006 seteditor.py
116 116 5: -rwxrwxrwx 1 ville None 245 Dec 12 2006 seteditor.pyc
117 117
118 118 Now, we want strings having just file names and permissions::
119 119
120 120 [Q:doc/examples]|6> l2.fields(8,0)
121 121 <6> SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
122 122
123 123 0: total
124 124 1: example-demo.py -rw-rw-rw-
125 125 2: example-gnuplot.py -rwxrwxrwx
126 126 3: extension.py -rwxrwxrwx
127 127 4: seteditor.py -rwxrwxrwx
128 128 5: seteditor.pyc -rwxrwxrwx
129 129
130 130 Note how the line with 'total' does not raise IndexError.
131 131
132 132 If you want to split these (yielding lists), call fields() without
133 133 arguments::
134 134
135 135 [Q:doc/examples]|7> _.fields()
136 136 <7>
137 137 [['total'],
138 138 ['example-demo.py', '-rw-rw-rw-'],
139 139 ['example-gnuplot.py', '-rwxrwxrwx'],
140 140 ['extension.py', '-rwxrwxrwx'],
141 141 ['seteditor.py', '-rwxrwxrwx'],
142 142 ['seteditor.pyc', '-rwxrwxrwx']]
143 143
144 144 If you want to pass these separated with spaces to a command (typical
145 145 for lists if files), use the .s property::
146 146
147 147
148 148 [Q:doc/examples]|13> files = l2.fields(8).s
149 149 [Q:doc/examples]|14> files
150 150 <14> 'example-demo.py example-gnuplot.py extension.py seteditor.py seteditor.pyc'
151 151 [Q:doc/examples]|15> ls $files
152 152 example-demo.py example-gnuplot.py extension.py seteditor.py seteditor.pyc
153 153
154 154 SLists are inherited from normal Python lists, so every list method is
155 155 available::
156 156
157 157 [Q:doc/examples]|21> lines.append('hey')
158 158
159 159
160 160 Real world example: remove all files outside version control
161 161 ------------------------------------------------------------
162 162
163 163 First, capture output of "hg status"::
164 164
165 165 [Q:/ipython]|28> out = !hg status
166 166 ==
167 167 ['M IPython\\extensions\\ipy_kitcfg.py',
168 168 'M IPython\\extensions\\ipy_rehashdir.py',
169 169 ...
170 170 '? build\\lib\\IPython\\Debugger.py',
171 171 '? build\\lib\\IPython\\extensions\\InterpreterExec.py',
172 172 '? build\\lib\\IPython\\extensions\\InterpreterPasteInput.py',
173 173 ...
174 174
175 175 (lines starting with ? are not under version control).
176 176
177 177 ::
178 178
179 179 [Q:/ipython]|35> junk = out.grep(r'^\?').fields(1)
180 180 [Q:/ipython]|36> junk
181 181 <36> SList (.p, .n, .l, .s, .grep(), .fields() availab
182 182 ...
183 183 10: build\bdist.win32\winexe\temp\_ctypes.py
184 184 11: build\bdist.win32\winexe\temp\_hashlib.py
185 185 12: build\bdist.win32\winexe\temp\_socket.py
186 186
187 187 Now we can just remove these files by doing 'rm $junk.s'.
188 188
189 The .s, .n, .p properties
189 The .n, .s, .p properties
190 190 -------------------------
191 191
192 The ``.s`` property returns one string where lines are separated by
193 single space (for convenient passing to system commands). The ``.n``
194 property return one string where the lines are separated by a newline
195 (i.e. the original output of the function). If the items in string
196 list are file names, ``.p`` can be used to get a list of "path" objects
197 for convenient file manipulation.
192 Properties of `SList <https://ipython.readthedocs.io/en/stable/api/generated/IPython.utils.text.html?highlight=SList#IPython.utils.text.SList>`_ wrapper
193 provide a convenient ways to use contained text in different formats:
198 194
195 * ``.n`` returns (original) string with lines separated by a newline
196 * ``.s`` returns string with lines separated by single space (for
197 convenient passing to system commands)
198 * ``.p`` returns list of "path" objects from detected file names
General Comments 0
You need to be logged in to leave comments. Login now