##// END OF EJS Templates
Aliases are now lowercase on win32
vivainio -
Show More
@@ -1,104 +1,105 b''
1 1 # -*- coding: utf-8 -*-
2 2 """ IPython extension: add %rehashdir magic
3 3
4 4 Usage:
5 5
6 6 %rehashdir c:/bin c:/tools
7 7 - Add all executables under c:/bin and c:/tools to alias table, in
8 8 order to make them directly executable from any directory.
9 9
10 10 This also serves as an example on how to extend ipython
11 11 with new magic functions.
12 12
13 13 Unlike rest of ipython, this requires Python 2.4 (optional
14 14 extensions are allowed to do that).
15 15
16 16 To install, add
17 17
18 18 "import_mod ext_rehashdir"
19 19
20 20 To your ipythonrc or just execute "import rehash_dir" in ipython
21 21 prompt.
22 22
23 23
24 24 $Id: InterpreterExec.py 994 2006-01-08 08:29:44Z fperez $
25 25 """
26 26
27 27 import IPython.ipapi
28 28 ip = IPython.ipapi.get()
29 29
30 30
31 31 import os,re,fnmatch
32 32
33 33 def rehashdir_f(self,arg):
34 34 """ Add executables in all specified dirs to alias table
35 35
36 36 Usage:
37 37
38 38 %rehashdir c:/bin;c:/tools
39 39 - Add all executables under c:/bin and c:/tools to alias table, in
40 40 order to make them directly executable from any directory.
41 41
42 42 Without arguments, add all executables in current directory.
43 43
44 44 """
45 45
46 46 # most of the code copied from Magic.magic_rehashx
47 47
48 48 def isjunk(fname):
49 49 junk = ['*~']
50 50 for j in junk:
51 51 if fnmatch.fnmatch(fname, j):
52 52 return True
53 53 return False
54 54
55 55 if not arg:
56 56 arg = '.'
57 57 path = map(os.path.abspath,arg.split(';'))
58 58 alias_table = self.shell.alias_table
59 59
60 60 if os.name == 'posix':
61 61 isexec = lambda fname:os.path.isfile(fname) and \
62 62 os.access(fname,os.X_OK)
63 63 else:
64 64
65 65 try:
66 66 winext = os.environ['pathext'].replace(';','|').replace('.','')
67 67 except KeyError:
68 68 winext = 'exe|com|bat|py'
69 69 if 'py' not in winext:
70 70 winext += '|py'
71 71
72 72 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
73 73 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
74 74 savedir = os.getcwd()
75 75 try:
76 76 # write the whole loop for posix/Windows so we don't have an if in
77 77 # the innermost part
78 78 if os.name == 'posix':
79 79 for pdir in path:
80 80 os.chdir(pdir)
81 81 for ff in os.listdir(pdir):
82 82 if isexec(ff) and not isjunk(ff):
83 83 # each entry in the alias table must be (N,name),
84 84 # where N is the number of positional arguments of the
85 85 # alias.
86 86 src,tgt = os.path.splitext(ff)[0], os.path.abspath(ff)
87 87 print "Aliasing:",src,"->",tgt
88 88 alias_table[src] = (0,tgt)
89 89 else:
90 90 for pdir in path:
91 91 os.chdir(pdir)
92 92 for ff in os.listdir(pdir):
93 93 if isexec(ff) and not isjunk(ff):
94 94 src, tgt = execre.sub(r'\1',ff), os.path.abspath(ff)
95 src = src.lower()
95 96 print "Aliasing:",src,"->",tgt
96 97 alias_table[src] = (0,tgt)
97 98 # Make sure the alias table doesn't contain keywords or builtins
98 99 self.shell.alias_table_validate()
99 100 # Call again init_auto_alias() so we get 'rm -i' and other
100 101 # modified aliases since %rehashx will probably clobber them
101 102 # self.shell.init_auto_alias()
102 103 finally:
103 104 os.chdir(savedir)
104 105 ip.expose_magic("rehashdir",rehashdir_f)
@@ -1,3137 +1,3137 b''
1 1 # -*- coding: utf-8 -*-
2 2 """Magic functions for InteractiveShell.
3 3
4 $Id: Magic.py 2344 2007-05-15 15:09:39Z vivainio $"""
4 $Id: Magic.py 2345 2007-05-15 15:31:25Z vivainio $"""
5 5
6 6 #*****************************************************************************
7 7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
8 8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 9 #
10 10 # Distributed under the terms of the BSD License. The full license is in
11 11 # the file COPYING, distributed as part of this software.
12 12 #*****************************************************************************
13 13
14 14 #****************************************************************************
15 15 # Modules and globals
16 16
17 17 from IPython import Release
18 18 __author__ = '%s <%s>\n%s <%s>' % \
19 19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
20 20 __license__ = Release.license
21 21
22 22 # Python standard modules
23 23 import __builtin__
24 24 import bdb
25 25 import inspect
26 26 import os
27 27 import pdb
28 28 import pydoc
29 29 import sys
30 30 import re
31 31 import tempfile
32 32 import time
33 33 import cPickle as pickle
34 34 import textwrap
35 35 from cStringIO import StringIO
36 36 from getopt import getopt,GetoptError
37 37 from pprint import pprint, pformat
38 38
39 39 # cProfile was added in Python2.5
40 40 try:
41 41 import cProfile as profile
42 42 import pstats
43 43 except ImportError:
44 44 # profile isn't bundled by default in Debian for license reasons
45 45 try:
46 46 import profile,pstats
47 47 except ImportError:
48 48 profile = pstats = None
49 49
50 50 # Homebrewed
51 51 import IPython
52 52 from IPython import Debugger, OInspect, wildcard
53 53 from IPython.FakeModule import FakeModule
54 54 from IPython.Itpl import Itpl, itpl, printpl,itplns
55 55 from IPython.PyColorize import Parser
56 56 from IPython.ipstruct import Struct
57 57 from IPython.macro import Macro
58 58 from IPython.genutils import *
59 59 from IPython import platutils
60 60
61 61 #***************************************************************************
62 62 # Utility functions
63 63 def on_off(tag):
64 64 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
65 65 return ['OFF','ON'][tag]
66 66
67 67 class Bunch: pass
68 68
69 69 #***************************************************************************
70 70 # Main class implementing Magic functionality
71 71 class Magic:
72 72 """Magic functions for InteractiveShell.
73 73
74 74 Shell functions which can be reached as %function_name. All magic
75 75 functions should accept a string, which they can parse for their own
76 76 needs. This can make some functions easier to type, eg `%cd ../`
77 77 vs. `%cd("../")`
78 78
79 79 ALL definitions MUST begin with the prefix magic_. The user won't need it
80 80 at the command line, but it is is needed in the definition. """
81 81
82 82 # class globals
83 83 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
84 84 'Automagic is ON, % prefix NOT needed for magic functions.']
85 85
86 86 #......................................................................
87 87 # some utility functions
88 88
89 89 def __init__(self,shell):
90 90
91 91 self.options_table = {}
92 92 if profile is None:
93 93 self.magic_prun = self.profile_missing_notice
94 94 self.shell = shell
95 95
96 96 # namespace for holding state we may need
97 97 self._magic_state = Bunch()
98 98
99 99 def profile_missing_notice(self, *args, **kwargs):
100 100 error("""\
101 101 The profile module could not be found. If you are a Debian user,
102 102 it has been removed from the standard Debian package because of its non-free
103 103 license. To use profiling, please install"python2.3-profiler" from non-free.""")
104 104
105 105 def default_option(self,fn,optstr):
106 106 """Make an entry in the options_table for fn, with value optstr"""
107 107
108 108 if fn not in self.lsmagic():
109 109 error("%s is not a magic function" % fn)
110 110 self.options_table[fn] = optstr
111 111
112 112 def lsmagic(self):
113 113 """Return a list of currently available magic functions.
114 114
115 115 Gives a list of the bare names after mangling (['ls','cd', ...], not
116 116 ['magic_ls','magic_cd',...]"""
117 117
118 118 # FIXME. This needs a cleanup, in the way the magics list is built.
119 119
120 120 # magics in class definition
121 121 class_magic = lambda fn: fn.startswith('magic_') and \
122 122 callable(Magic.__dict__[fn])
123 123 # in instance namespace (run-time user additions)
124 124 inst_magic = lambda fn: fn.startswith('magic_') and \
125 125 callable(self.__dict__[fn])
126 126 # and bound magics by user (so they can access self):
127 127 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
128 128 callable(self.__class__.__dict__[fn])
129 129 magics = filter(class_magic,Magic.__dict__.keys()) + \
130 130 filter(inst_magic,self.__dict__.keys()) + \
131 131 filter(inst_bound_magic,self.__class__.__dict__.keys())
132 132 out = []
133 133 for fn in magics:
134 134 out.append(fn.replace('magic_','',1))
135 135 out.sort()
136 136 return out
137 137
138 138 def extract_input_slices(self,slices,raw=False):
139 139 """Return as a string a set of input history slices.
140 140
141 141 Inputs:
142 142
143 143 - slices: the set of slices is given as a list of strings (like
144 144 ['1','4:8','9'], since this function is for use by magic functions
145 145 which get their arguments as strings.
146 146
147 147 Optional inputs:
148 148
149 149 - raw(False): by default, the processed input is used. If this is
150 150 true, the raw input history is used instead.
151 151
152 152 Note that slices can be called with two notations:
153 153
154 154 N:M -> standard python form, means including items N...(M-1).
155 155
156 156 N-M -> include items N..M (closed endpoint)."""
157 157
158 158 if raw:
159 159 hist = self.shell.input_hist_raw
160 160 else:
161 161 hist = self.shell.input_hist
162 162
163 163 cmds = []
164 164 for chunk in slices:
165 165 if ':' in chunk:
166 166 ini,fin = map(int,chunk.split(':'))
167 167 elif '-' in chunk:
168 168 ini,fin = map(int,chunk.split('-'))
169 169 fin += 1
170 170 else:
171 171 ini = int(chunk)
172 172 fin = ini+1
173 173 cmds.append(hist[ini:fin])
174 174 return cmds
175 175
176 176 def _ofind(self, oname, namespaces=None):
177 177 """Find an object in the available namespaces.
178 178
179 179 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
180 180
181 181 Has special code to detect magic functions.
182 182 """
183 183
184 184 oname = oname.strip()
185 185
186 186 alias_ns = None
187 187 if namespaces is None:
188 188 # Namespaces to search in:
189 189 # Put them in a list. The order is important so that we
190 190 # find things in the same order that Python finds them.
191 191 namespaces = [ ('Interactive', self.shell.user_ns),
192 192 ('IPython internal', self.shell.internal_ns),
193 193 ('Python builtin', __builtin__.__dict__),
194 194 ('Alias', self.shell.alias_table),
195 195 ]
196 196 alias_ns = self.shell.alias_table
197 197
198 198 # initialize results to 'null'
199 199 found = 0; obj = None; ospace = None; ds = None;
200 200 ismagic = 0; isalias = 0; parent = None
201 201
202 202 # Look for the given name by splitting it in parts. If the head is
203 203 # found, then we look for all the remaining parts as members, and only
204 204 # declare success if we can find them all.
205 205 oname_parts = oname.split('.')
206 206 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
207 207 for nsname,ns in namespaces:
208 208 try:
209 209 obj = ns[oname_head]
210 210 except KeyError:
211 211 continue
212 212 else:
213 213 #print 'oname_rest:', oname_rest # dbg
214 214 for part in oname_rest:
215 215 try:
216 216 parent = obj
217 217 obj = getattr(obj,part)
218 218 except:
219 219 # Blanket except b/c some badly implemented objects
220 220 # allow __getattr__ to raise exceptions other than
221 221 # AttributeError, which then crashes IPython.
222 222 break
223 223 else:
224 224 # If we finish the for loop (no break), we got all members
225 225 found = 1
226 226 ospace = nsname
227 227 if ns == alias_ns:
228 228 isalias = 1
229 229 break # namespace loop
230 230
231 231 # Try to see if it's magic
232 232 if not found:
233 233 if oname.startswith(self.shell.ESC_MAGIC):
234 234 oname = oname[1:]
235 235 obj = getattr(self,'magic_'+oname,None)
236 236 if obj is not None:
237 237 found = 1
238 238 ospace = 'IPython internal'
239 239 ismagic = 1
240 240
241 241 # Last try: special-case some literals like '', [], {}, etc:
242 242 if not found and oname_head in ["''",'""','[]','{}','()']:
243 243 obj = eval(oname_head)
244 244 found = 1
245 245 ospace = 'Interactive'
246 246
247 247 return {'found':found, 'obj':obj, 'namespace':ospace,
248 248 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
249 249
250 250 def arg_err(self,func):
251 251 """Print docstring if incorrect arguments were passed"""
252 252 print 'Error in arguments:'
253 253 print OInspect.getdoc(func)
254 254
255 255 def format_latex(self,strng):
256 256 """Format a string for latex inclusion."""
257 257
258 258 # Characters that need to be escaped for latex:
259 259 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
260 260 # Magic command names as headers:
261 261 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
262 262 re.MULTILINE)
263 263 # Magic commands
264 264 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
265 265 re.MULTILINE)
266 266 # Paragraph continue
267 267 par_re = re.compile(r'\\$',re.MULTILINE)
268 268
269 269 # The "\n" symbol
270 270 newline_re = re.compile(r'\\n')
271 271
272 272 # Now build the string for output:
273 273 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
274 274 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
275 275 strng)
276 276 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
277 277 strng = par_re.sub(r'\\\\',strng)
278 278 strng = escape_re.sub(r'\\\1',strng)
279 279 strng = newline_re.sub(r'\\textbackslash{}n',strng)
280 280 return strng
281 281
282 282 def format_screen(self,strng):
283 283 """Format a string for screen printing.
284 284
285 285 This removes some latex-type format codes."""
286 286 # Paragraph continue
287 287 par_re = re.compile(r'\\$',re.MULTILINE)
288 288 strng = par_re.sub('',strng)
289 289 return strng
290 290
291 291 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
292 292 """Parse options passed to an argument string.
293 293
294 294 The interface is similar to that of getopt(), but it returns back a
295 295 Struct with the options as keys and the stripped argument string still
296 296 as a string.
297 297
298 298 arg_str is quoted as a true sys.argv vector by using shlex.split.
299 299 This allows us to easily expand variables, glob files, quote
300 300 arguments, etc.
301 301
302 302 Options:
303 303 -mode: default 'string'. If given as 'list', the argument string is
304 304 returned as a list (split on whitespace) instead of a string.
305 305
306 306 -list_all: put all option values in lists. Normally only options
307 307 appearing more than once are put in a list.
308 308
309 309 -posix (True): whether to split the input line in POSIX mode or not,
310 310 as per the conventions outlined in the shlex module from the
311 311 standard library."""
312 312
313 313 # inject default options at the beginning of the input line
314 314 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
315 315 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
316 316
317 317 mode = kw.get('mode','string')
318 318 if mode not in ['string','list']:
319 319 raise ValueError,'incorrect mode given: %s' % mode
320 320 # Get options
321 321 list_all = kw.get('list_all',0)
322 322 posix = kw.get('posix',True)
323 323
324 324 # Check if we have more than one argument to warrant extra processing:
325 325 odict = {} # Dictionary with options
326 326 args = arg_str.split()
327 327 if len(args) >= 1:
328 328 # If the list of inputs only has 0 or 1 thing in it, there's no
329 329 # need to look for options
330 330 argv = arg_split(arg_str,posix)
331 331 # Do regular option processing
332 332 try:
333 333 opts,args = getopt(argv,opt_str,*long_opts)
334 334 except GetoptError,e:
335 335 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
336 336 " ".join(long_opts)))
337 337 for o,a in opts:
338 338 if o.startswith('--'):
339 339 o = o[2:]
340 340 else:
341 341 o = o[1:]
342 342 try:
343 343 odict[o].append(a)
344 344 except AttributeError:
345 345 odict[o] = [odict[o],a]
346 346 except KeyError:
347 347 if list_all:
348 348 odict[o] = [a]
349 349 else:
350 350 odict[o] = a
351 351
352 352 # Prepare opts,args for return
353 353 opts = Struct(odict)
354 354 if mode == 'string':
355 355 args = ' '.join(args)
356 356
357 357 return opts,args
358 358
359 359 #......................................................................
360 360 # And now the actual magic functions
361 361
362 362 # Functions for IPython shell work (vars,funcs, config, etc)
363 363 def magic_lsmagic(self, parameter_s = ''):
364 364 """List currently available magic functions."""
365 365 mesc = self.shell.ESC_MAGIC
366 366 print 'Available magic functions:\n'+mesc+\
367 367 (' '+mesc).join(self.lsmagic())
368 368 print '\n' + Magic.auto_status[self.shell.rc.automagic]
369 369 return None
370 370
371 371 def magic_magic(self, parameter_s = ''):
372 372 """Print information about the magic function system."""
373 373
374 374 mode = ''
375 375 try:
376 376 if parameter_s.split()[0] == '-latex':
377 377 mode = 'latex'
378 378 if parameter_s.split()[0] == '-brief':
379 379 mode = 'brief'
380 380 except:
381 381 pass
382 382
383 383 magic_docs = []
384 384 for fname in self.lsmagic():
385 385 mname = 'magic_' + fname
386 386 for space in (Magic,self,self.__class__):
387 387 try:
388 388 fn = space.__dict__[mname]
389 389 except KeyError:
390 390 pass
391 391 else:
392 392 break
393 393 if mode == 'brief':
394 394 # only first line
395 395 fndoc = fn.__doc__.split('\n',1)[0]
396 396 else:
397 397 fndoc = fn.__doc__
398 398
399 399 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
400 400 fname,fndoc))
401 401 magic_docs = ''.join(magic_docs)
402 402
403 403 if mode == 'latex':
404 404 print self.format_latex(magic_docs)
405 405 return
406 406 else:
407 407 magic_docs = self.format_screen(magic_docs)
408 408 if mode == 'brief':
409 409 return magic_docs
410 410
411 411 outmsg = """
412 412 IPython's 'magic' functions
413 413 ===========================
414 414
415 415 The magic function system provides a series of functions which allow you to
416 416 control the behavior of IPython itself, plus a lot of system-type
417 417 features. All these functions are prefixed with a % character, but parameters
418 418 are given without parentheses or quotes.
419 419
420 420 NOTE: If you have 'automagic' enabled (via the command line option or with the
421 421 %automagic function), you don't need to type in the % explicitly. By default,
422 422 IPython ships with automagic on, so you should only rarely need the % escape.
423 423
424 424 Example: typing '%cd mydir' (without the quotes) changes you working directory
425 425 to 'mydir', if it exists.
426 426
427 427 You can define your own magic functions to extend the system. See the supplied
428 428 ipythonrc and example-magic.py files for details (in your ipython
429 429 configuration directory, typically $HOME/.ipython/).
430 430
431 431 You can also define your own aliased names for magic functions. In your
432 432 ipythonrc file, placing a line like:
433 433
434 434 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
435 435
436 436 will define %pf as a new name for %profile.
437 437
438 438 You can also call magics in code using the ipmagic() function, which IPython
439 439 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
440 440
441 441 For a list of the available magic functions, use %lsmagic. For a description
442 442 of any of them, type %magic_name?, e.g. '%cd?'.
443 443
444 444 Currently the magic system has the following functions:\n"""
445 445
446 446 mesc = self.shell.ESC_MAGIC
447 447 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
448 448 "\n\n%s%s\n\n%s" % (outmsg,
449 449 magic_docs,mesc,mesc,
450 450 (' '+mesc).join(self.lsmagic()),
451 451 Magic.auto_status[self.shell.rc.automagic] ) )
452 452
453 453 page(outmsg,screen_lines=self.shell.rc.screen_length)
454 454
455 455 def magic_automagic(self, parameter_s = ''):
456 456 """Make magic functions callable without having to type the initial %.
457 457
458 458 Without argumentsl toggles on/off (when off, you must call it as
459 459 %automagic, of course). With arguments it sets the value, and you can
460 460 use any of (case insensitive):
461 461
462 462 - on,1,True: to activate
463 463
464 464 - off,0,False: to deactivate.
465 465
466 466 Note that magic functions have lowest priority, so if there's a
467 467 variable whose name collides with that of a magic fn, automagic won't
468 468 work for that function (you get the variable instead). However, if you
469 469 delete the variable (del var), the previously shadowed magic function
470 470 becomes visible to automagic again."""
471 471
472 472 rc = self.shell.rc
473 473 arg = parameter_s.lower()
474 474 if parameter_s in ('on','1','true'):
475 475 rc.automagic = True
476 476 elif parameter_s in ('off','0','false'):
477 477 rc.automagic = False
478 478 else:
479 479 rc.automagic = not rc.automagic
480 480 print '\n' + Magic.auto_status[rc.automagic]
481 481
482 482 def magic_autocall(self, parameter_s = ''):
483 483 """Make functions callable without having to type parentheses.
484 484
485 485 Usage:
486 486
487 487 %autocall [mode]
488 488
489 489 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
490 490 value is toggled on and off (remembering the previous state)."""
491 491
492 492 rc = self.shell.rc
493 493
494 494 if parameter_s:
495 495 arg = int(parameter_s)
496 496 else:
497 497 arg = 'toggle'
498 498
499 499 if not arg in (0,1,2,'toggle'):
500 500 error('Valid modes: (0->Off, 1->Smart, 2->Full')
501 501 return
502 502
503 503 if arg in (0,1,2):
504 504 rc.autocall = arg
505 505 else: # toggle
506 506 if rc.autocall:
507 507 self._magic_state.autocall_save = rc.autocall
508 508 rc.autocall = 0
509 509 else:
510 510 try:
511 511 rc.autocall = self._magic_state.autocall_save
512 512 except AttributeError:
513 513 rc.autocall = self._magic_state.autocall_save = 1
514 514
515 515 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
516 516
517 517 def magic_autoindent(self, parameter_s = ''):
518 518 """Toggle autoindent on/off (if available)."""
519 519
520 520 self.shell.set_autoindent()
521 521 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
522 522
523 523 def magic_system_verbose(self, parameter_s = ''):
524 524 """Set verbose printing of system calls.
525 525
526 526 If called without an argument, act as a toggle"""
527 527
528 528 if parameter_s:
529 529 val = bool(eval(parameter_s))
530 530 else:
531 531 val = None
532 532
533 533 self.shell.rc_set_toggle('system_verbose',val)
534 534 print "System verbose printing is:",\
535 535 ['OFF','ON'][self.shell.rc.system_verbose]
536 536
537 537 def magic_history(self, parameter_s = ''):
538 538 """Print input history (_i<n> variables), with most recent last.
539 539
540 540 %history -> print at most 40 inputs (some may be multi-line)\\
541 541 %history n -> print at most n inputs\\
542 542 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
543 543
544 544 Each input's number <n> is shown, and is accessible as the
545 545 automatically generated variable _i<n>. Multi-line statements are
546 546 printed starting at a new line for easy copy/paste.
547 547
548 548
549 549 Options:
550 550
551 551 -n: do NOT print line numbers. This is useful if you want to get a
552 552 printout of many lines which can be directly pasted into a text
553 553 editor.
554 554
555 555 This feature is only available if numbered prompts are in use.
556 556
557 557 -r: print the 'raw' history. IPython filters your input and
558 558 converts it all into valid Python source before executing it (things
559 559 like magics or aliases are turned into function calls, for
560 560 example). With this option, you'll see the unfiltered history
561 561 instead of the filtered version: '%cd /' will be seen as '%cd /'
562 562 instead of '_ip.magic("%cd /")'.
563 563 """
564 564
565 565 shell = self.shell
566 566 if not shell.outputcache.do_full_cache:
567 567 print 'This feature is only available if numbered prompts are in use.'
568 568 return
569 569 opts,args = self.parse_options(parameter_s,'nr',mode='list')
570 570
571 571 if opts.has_key('r'):
572 572 input_hist = shell.input_hist_raw
573 573 else:
574 574 input_hist = shell.input_hist
575 575
576 576 default_length = 40
577 577 if len(args) == 0:
578 578 final = len(input_hist)
579 579 init = max(1,final-default_length)
580 580 elif len(args) == 1:
581 581 final = len(input_hist)
582 582 init = max(1,final-int(args[0]))
583 583 elif len(args) == 2:
584 584 init,final = map(int,args)
585 585 else:
586 586 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
587 587 print self.magic_hist.__doc__
588 588 return
589 589 width = len(str(final))
590 590 line_sep = ['','\n']
591 591 print_nums = not opts.has_key('n')
592 592 for in_num in range(init,final):
593 593 inline = input_hist[in_num]
594 594 multiline = int(inline.count('\n') > 1)
595 595 if print_nums:
596 596 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
597 597 print inline,
598 598
599 599 def magic_hist(self, parameter_s=''):
600 600 """Alternate name for %history."""
601 601 return self.magic_history(parameter_s)
602 602
603 603 def magic_p(self, parameter_s=''):
604 604 """Just a short alias for Python's 'print'."""
605 605 exec 'print ' + parameter_s in self.shell.user_ns
606 606
607 607 def magic_r(self, parameter_s=''):
608 608 """Repeat previous input.
609 609
610 610 If given an argument, repeats the previous command which starts with
611 611 the same string, otherwise it just repeats the previous input.
612 612
613 613 Shell escaped commands (with ! as first character) are not recognized
614 614 by this system, only pure python code and magic commands.
615 615 """
616 616
617 617 start = parameter_s.strip()
618 618 esc_magic = self.shell.ESC_MAGIC
619 619 # Identify magic commands even if automagic is on (which means
620 620 # the in-memory version is different from that typed by the user).
621 621 if self.shell.rc.automagic:
622 622 start_magic = esc_magic+start
623 623 else:
624 624 start_magic = start
625 625 # Look through the input history in reverse
626 626 for n in range(len(self.shell.input_hist)-2,0,-1):
627 627 input = self.shell.input_hist[n]
628 628 # skip plain 'r' lines so we don't recurse to infinity
629 629 if input != '_ip.magic("r")\n' and \
630 630 (input.startswith(start) or input.startswith(start_magic)):
631 631 #print 'match',`input` # dbg
632 632 print 'Executing:',input,
633 633 self.shell.runlines(input)
634 634 return
635 635 print 'No previous input matching `%s` found.' % start
636 636
637 637 def magic_page(self, parameter_s=''):
638 638 """Pretty print the object and display it through a pager.
639 639
640 640 %page [options] OBJECT
641 641
642 642 If no object is given, use _ (last output).
643 643
644 644 Options:
645 645
646 646 -r: page str(object), don't pretty-print it."""
647 647
648 648 # After a function contributed by Olivier Aubert, slightly modified.
649 649
650 650 # Process options/args
651 651 opts,args = self.parse_options(parameter_s,'r')
652 652 raw = 'r' in opts
653 653
654 654 oname = args and args or '_'
655 655 info = self._ofind(oname)
656 656 if info['found']:
657 657 txt = (raw and str or pformat)( info['obj'] )
658 658 page(txt)
659 659 else:
660 660 print 'Object `%s` not found' % oname
661 661
662 662 def magic_profile(self, parameter_s=''):
663 663 """Print your currently active IPyhton profile."""
664 664 if self.shell.rc.profile:
665 665 printpl('Current IPython profile: $self.shell.rc.profile.')
666 666 else:
667 667 print 'No profile active.'
668 668
669 669 def _inspect(self,meth,oname,namespaces=None,**kw):
670 670 """Generic interface to the inspector system.
671 671
672 672 This function is meant to be called by pdef, pdoc & friends."""
673 673
674 674 #oname = oname.strip()
675 675 #print '1- oname: <%r>' % oname # dbg
676 676 try:
677 677 oname = oname.strip().encode('ascii')
678 678 #print '2- oname: <%r>' % oname # dbg
679 679 except UnicodeEncodeError:
680 680 print 'Python identifiers can only contain ascii characters.'
681 681 return 'not found'
682 682
683 683 info = Struct(self._ofind(oname, namespaces))
684 684
685 685 if info.found:
686 686 # Get the docstring of the class property if it exists.
687 687 path = oname.split('.')
688 688 root = '.'.join(path[:-1])
689 689 if info.parent is not None:
690 690 try:
691 691 target = getattr(info.parent, '__class__')
692 692 # The object belongs to a class instance.
693 693 try:
694 694 target = getattr(target, path[-1])
695 695 # The class defines the object.
696 696 if isinstance(target, property):
697 697 oname = root + '.__class__.' + path[-1]
698 698 info = Struct(self._ofind(oname))
699 699 except AttributeError: pass
700 700 except AttributeError: pass
701 701
702 702 pmethod = getattr(self.shell.inspector,meth)
703 703 formatter = info.ismagic and self.format_screen or None
704 704 if meth == 'pdoc':
705 705 pmethod(info.obj,oname,formatter)
706 706 elif meth == 'pinfo':
707 707 pmethod(info.obj,oname,formatter,info,**kw)
708 708 else:
709 709 pmethod(info.obj,oname)
710 710 else:
711 711 print 'Object `%s` not found.' % oname
712 712 return 'not found' # so callers can take other action
713 713
714 714 def magic_pdef(self, parameter_s='', namespaces=None):
715 715 """Print the definition header for any callable object.
716 716
717 717 If the object is a class, print the constructor information."""
718 718 self._inspect('pdef',parameter_s, namespaces)
719 719
720 720 def magic_pdoc(self, parameter_s='', namespaces=None):
721 721 """Print the docstring for an object.
722 722
723 723 If the given object is a class, it will print both the class and the
724 724 constructor docstrings."""
725 725 self._inspect('pdoc',parameter_s, namespaces)
726 726
727 727 def magic_psource(self, parameter_s='', namespaces=None):
728 728 """Print (or run through pager) the source code for an object."""
729 729 self._inspect('psource',parameter_s, namespaces)
730 730
731 731 def magic_pfile(self, parameter_s=''):
732 732 """Print (or run through pager) the file where an object is defined.
733 733
734 734 The file opens at the line where the object definition begins. IPython
735 735 will honor the environment variable PAGER if set, and otherwise will
736 736 do its best to print the file in a convenient form.
737 737
738 738 If the given argument is not an object currently defined, IPython will
739 739 try to interpret it as a filename (automatically adding a .py extension
740 740 if needed). You can thus use %pfile as a syntax highlighting code
741 741 viewer."""
742 742
743 743 # first interpret argument as an object name
744 744 out = self._inspect('pfile',parameter_s)
745 745 # if not, try the input as a filename
746 746 if out == 'not found':
747 747 try:
748 748 filename = get_py_filename(parameter_s)
749 749 except IOError,msg:
750 750 print msg
751 751 return
752 752 page(self.shell.inspector.format(file(filename).read()))
753 753
754 754 def magic_pinfo(self, parameter_s='', namespaces=None):
755 755 """Provide detailed information about an object.
756 756
757 757 '%pinfo object' is just a synonym for object? or ?object."""
758 758
759 759 #print 'pinfo par: <%s>' % parameter_s # dbg
760 760
761 761 # detail_level: 0 -> obj? , 1 -> obj??
762 762 detail_level = 0
763 763 # We need to detect if we got called as 'pinfo pinfo foo', which can
764 764 # happen if the user types 'pinfo foo?' at the cmd line.
765 765 pinfo,qmark1,oname,qmark2 = \
766 766 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
767 767 if pinfo or qmark1 or qmark2:
768 768 detail_level = 1
769 769 if "*" in oname:
770 770 self.magic_psearch(oname)
771 771 else:
772 772 self._inspect('pinfo', oname, detail_level=detail_level,
773 773 namespaces=namespaces)
774 774
775 775 def magic_psearch(self, parameter_s=''):
776 776 """Search for object in namespaces by wildcard.
777 777
778 778 %psearch [options] PATTERN [OBJECT TYPE]
779 779
780 780 Note: ? can be used as a synonym for %psearch, at the beginning or at
781 781 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
782 782 rest of the command line must be unchanged (options come first), so
783 783 for example the following forms are equivalent
784 784
785 785 %psearch -i a* function
786 786 -i a* function?
787 787 ?-i a* function
788 788
789 789 Arguments:
790 790
791 791 PATTERN
792 792
793 793 where PATTERN is a string containing * as a wildcard similar to its
794 794 use in a shell. The pattern is matched in all namespaces on the
795 795 search path. By default objects starting with a single _ are not
796 796 matched, many IPython generated objects have a single
797 797 underscore. The default is case insensitive matching. Matching is
798 798 also done on the attributes of objects and not only on the objects
799 799 in a module.
800 800
801 801 [OBJECT TYPE]
802 802
803 803 Is the name of a python type from the types module. The name is
804 804 given in lowercase without the ending type, ex. StringType is
805 805 written string. By adding a type here only objects matching the
806 806 given type are matched. Using all here makes the pattern match all
807 807 types (this is the default).
808 808
809 809 Options:
810 810
811 811 -a: makes the pattern match even objects whose names start with a
812 812 single underscore. These names are normally ommitted from the
813 813 search.
814 814
815 815 -i/-c: make the pattern case insensitive/sensitive. If neither of
816 816 these options is given, the default is read from your ipythonrc
817 817 file. The option name which sets this value is
818 818 'wildcards_case_sensitive'. If this option is not specified in your
819 819 ipythonrc file, IPython's internal default is to do a case sensitive
820 820 search.
821 821
822 822 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
823 823 specifiy can be searched in any of the following namespaces:
824 824 'builtin', 'user', 'user_global','internal', 'alias', where
825 825 'builtin' and 'user' are the search defaults. Note that you should
826 826 not use quotes when specifying namespaces.
827 827
828 828 'Builtin' contains the python module builtin, 'user' contains all
829 829 user data, 'alias' only contain the shell aliases and no python
830 830 objects, 'internal' contains objects used by IPython. The
831 831 'user_global' namespace is only used by embedded IPython instances,
832 832 and it contains module-level globals. You can add namespaces to the
833 833 search with -s or exclude them with -e (these options can be given
834 834 more than once).
835 835
836 836 Examples:
837 837
838 838 %psearch a* -> objects beginning with an a
839 839 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
840 840 %psearch a* function -> all functions beginning with an a
841 841 %psearch re.e* -> objects beginning with an e in module re
842 842 %psearch r*.e* -> objects that start with e in modules starting in r
843 843 %psearch r*.* string -> all strings in modules beginning with r
844 844
845 845 Case sensitve search:
846 846
847 847 %psearch -c a* list all object beginning with lower case a
848 848
849 849 Show objects beginning with a single _:
850 850
851 851 %psearch -a _* list objects beginning with a single underscore"""
852 852 try:
853 853 parameter_s = parameter_s.encode('ascii')
854 854 except UnicodeEncodeError:
855 855 print 'Python identifiers can only contain ascii characters.'
856 856 return
857 857
858 858 # default namespaces to be searched
859 859 def_search = ['user','builtin']
860 860
861 861 # Process options/args
862 862 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
863 863 opt = opts.get
864 864 shell = self.shell
865 865 psearch = shell.inspector.psearch
866 866
867 867 # select case options
868 868 if opts.has_key('i'):
869 869 ignore_case = True
870 870 elif opts.has_key('c'):
871 871 ignore_case = False
872 872 else:
873 873 ignore_case = not shell.rc.wildcards_case_sensitive
874 874
875 875 # Build list of namespaces to search from user options
876 876 def_search.extend(opt('s',[]))
877 877 ns_exclude = ns_exclude=opt('e',[])
878 878 ns_search = [nm for nm in def_search if nm not in ns_exclude]
879 879
880 880 # Call the actual search
881 881 try:
882 882 psearch(args,shell.ns_table,ns_search,
883 883 show_all=opt('a'),ignore_case=ignore_case)
884 884 except:
885 885 shell.showtraceback()
886 886
887 887 def magic_who_ls(self, parameter_s=''):
888 888 """Return a sorted list of all interactive variables.
889 889
890 890 If arguments are given, only variables of types matching these
891 891 arguments are returned."""
892 892
893 893 user_ns = self.shell.user_ns
894 894 internal_ns = self.shell.internal_ns
895 895 user_config_ns = self.shell.user_config_ns
896 896 out = []
897 897 typelist = parameter_s.split()
898 898
899 899 for i in user_ns:
900 900 if not (i.startswith('_') or i.startswith('_i')) \
901 901 and not (i in internal_ns or i in user_config_ns):
902 902 if typelist:
903 903 if type(user_ns[i]).__name__ in typelist:
904 904 out.append(i)
905 905 else:
906 906 out.append(i)
907 907 out.sort()
908 908 return out
909 909
910 910 def magic_who(self, parameter_s=''):
911 911 """Print all interactive variables, with some minimal formatting.
912 912
913 913 If any arguments are given, only variables whose type matches one of
914 914 these are printed. For example:
915 915
916 916 %who function str
917 917
918 918 will only list functions and strings, excluding all other types of
919 919 variables. To find the proper type names, simply use type(var) at a
920 920 command line to see how python prints type names. For example:
921 921
922 922 In [1]: type('hello')\\
923 923 Out[1]: <type 'str'>
924 924
925 925 indicates that the type name for strings is 'str'.
926 926
927 927 %who always excludes executed names loaded through your configuration
928 928 file and things which are internal to IPython.
929 929
930 930 This is deliberate, as typically you may load many modules and the
931 931 purpose of %who is to show you only what you've manually defined."""
932 932
933 933 varlist = self.magic_who_ls(parameter_s)
934 934 if not varlist:
935 935 if parameter_s:
936 936 print 'No variables match your requested type.'
937 937 else:
938 938 print 'Interactive namespace is empty.'
939 939 return
940 940
941 941 # if we have variables, move on...
942 942 count = 0
943 943 for i in varlist:
944 944 print i+'\t',
945 945 count += 1
946 946 if count > 8:
947 947 count = 0
948 948 print
949 949 print
950 950
951 951 def magic_whos(self, parameter_s=''):
952 952 """Like %who, but gives some extra information about each variable.
953 953
954 954 The same type filtering of %who can be applied here.
955 955
956 956 For all variables, the type is printed. Additionally it prints:
957 957
958 958 - For {},[],(): their length.
959 959
960 960 - For numpy and Numeric arrays, a summary with shape, number of
961 961 elements, typecode and size in memory.
962 962
963 963 - Everything else: a string representation, snipping their middle if
964 964 too long."""
965 965
966 966 varnames = self.magic_who_ls(parameter_s)
967 967 if not varnames:
968 968 if parameter_s:
969 969 print 'No variables match your requested type.'
970 970 else:
971 971 print 'Interactive namespace is empty.'
972 972 return
973 973
974 974 # if we have variables, move on...
975 975
976 976 # for these types, show len() instead of data:
977 977 seq_types = [types.DictType,types.ListType,types.TupleType]
978 978
979 979 # for numpy/Numeric arrays, display summary info
980 980 try:
981 981 import numpy
982 982 except ImportError:
983 983 ndarray_type = None
984 984 else:
985 985 ndarray_type = numpy.ndarray.__name__
986 986 try:
987 987 import Numeric
988 988 except ImportError:
989 989 array_type = None
990 990 else:
991 991 array_type = Numeric.ArrayType.__name__
992 992
993 993 # Find all variable names and types so we can figure out column sizes
994 994 def get_vars(i):
995 995 return self.shell.user_ns[i]
996 996
997 997 # some types are well known and can be shorter
998 998 abbrevs = {'IPython.macro.Macro' : 'Macro'}
999 999 def type_name(v):
1000 1000 tn = type(v).__name__
1001 1001 return abbrevs.get(tn,tn)
1002 1002
1003 1003 varlist = map(get_vars,varnames)
1004 1004
1005 1005 typelist = []
1006 1006 for vv in varlist:
1007 1007 tt = type_name(vv)
1008 1008
1009 1009 if tt=='instance':
1010 1010 typelist.append( abbrevs.get(str(vv.__class__),
1011 1011 str(vv.__class__)))
1012 1012 else:
1013 1013 typelist.append(tt)
1014 1014
1015 1015 # column labels and # of spaces as separator
1016 1016 varlabel = 'Variable'
1017 1017 typelabel = 'Type'
1018 1018 datalabel = 'Data/Info'
1019 1019 colsep = 3
1020 1020 # variable format strings
1021 1021 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
1022 1022 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
1023 1023 aformat = "%s: %s elems, type `%s`, %s bytes"
1024 1024 # find the size of the columns to format the output nicely
1025 1025 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
1026 1026 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
1027 1027 # table header
1028 1028 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
1029 1029 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
1030 1030 # and the table itself
1031 1031 kb = 1024
1032 1032 Mb = 1048576 # kb**2
1033 1033 for vname,var,vtype in zip(varnames,varlist,typelist):
1034 1034 print itpl(vformat),
1035 1035 if vtype in seq_types:
1036 1036 print len(var)
1037 1037 elif vtype in [array_type,ndarray_type]:
1038 1038 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
1039 1039 if vtype==ndarray_type:
1040 1040 # numpy
1041 1041 vsize = var.size
1042 1042 vbytes = vsize*var.itemsize
1043 1043 vdtype = var.dtype
1044 1044 else:
1045 1045 # Numeric
1046 1046 vsize = Numeric.size(var)
1047 1047 vbytes = vsize*var.itemsize()
1048 1048 vdtype = var.typecode()
1049 1049
1050 1050 if vbytes < 100000:
1051 1051 print aformat % (vshape,vsize,vdtype,vbytes)
1052 1052 else:
1053 1053 print aformat % (vshape,vsize,vdtype,vbytes),
1054 1054 if vbytes < Mb:
1055 1055 print '(%s kb)' % (vbytes/kb,)
1056 1056 else:
1057 1057 print '(%s Mb)' % (vbytes/Mb,)
1058 1058 else:
1059 1059 try:
1060 1060 vstr = str(var)
1061 1061 except UnicodeEncodeError:
1062 1062 vstr = unicode(var).encode(sys.getdefaultencoding(),
1063 1063 'backslashreplace')
1064 1064 vstr = vstr.replace('\n','\\n')
1065 1065 if len(vstr) < 50:
1066 1066 print vstr
1067 1067 else:
1068 1068 printpl(vfmt_short)
1069 1069
1070 1070 def magic_reset(self, parameter_s=''):
1071 1071 """Resets the namespace by removing all names defined by the user.
1072 1072
1073 1073 Input/Output history are left around in case you need them."""
1074 1074
1075 1075 ans = self.shell.ask_yes_no(
1076 1076 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1077 1077 if not ans:
1078 1078 print 'Nothing done.'
1079 1079 return
1080 1080 user_ns = self.shell.user_ns
1081 1081 for i in self.magic_who_ls():
1082 1082 del(user_ns[i])
1083 1083
1084 1084 def magic_logstart(self,parameter_s=''):
1085 1085 """Start logging anywhere in a session.
1086 1086
1087 1087 %logstart [-o|-r|-t] [log_name [log_mode]]
1088 1088
1089 1089 If no name is given, it defaults to a file named 'ipython_log.py' in your
1090 1090 current directory, in 'rotate' mode (see below).
1091 1091
1092 1092 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1093 1093 history up to that point and then continues logging.
1094 1094
1095 1095 %logstart takes a second optional parameter: logging mode. This can be one
1096 1096 of (note that the modes are given unquoted):\\
1097 1097 append: well, that says it.\\
1098 1098 backup: rename (if exists) to name~ and start name.\\
1099 1099 global: single logfile in your home dir, appended to.\\
1100 1100 over : overwrite existing log.\\
1101 1101 rotate: create rotating logs name.1~, name.2~, etc.
1102 1102
1103 1103 Options:
1104 1104
1105 1105 -o: log also IPython's output. In this mode, all commands which
1106 1106 generate an Out[NN] prompt are recorded to the logfile, right after
1107 1107 their corresponding input line. The output lines are always
1108 1108 prepended with a '#[Out]# ' marker, so that the log remains valid
1109 1109 Python code.
1110 1110
1111 1111 Since this marker is always the same, filtering only the output from
1112 1112 a log is very easy, using for example a simple awk call:
1113 1113
1114 1114 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1115 1115
1116 1116 -r: log 'raw' input. Normally, IPython's logs contain the processed
1117 1117 input, so that user lines are logged in their final form, converted
1118 1118 into valid Python. For example, %Exit is logged as
1119 1119 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1120 1120 exactly as typed, with no transformations applied.
1121 1121
1122 1122 -t: put timestamps before each input line logged (these are put in
1123 1123 comments)."""
1124 1124
1125 1125 opts,par = self.parse_options(parameter_s,'ort')
1126 1126 log_output = 'o' in opts
1127 1127 log_raw_input = 'r' in opts
1128 1128 timestamp = 't' in opts
1129 1129
1130 1130 rc = self.shell.rc
1131 1131 logger = self.shell.logger
1132 1132
1133 1133 # if no args are given, the defaults set in the logger constructor by
1134 1134 # ipytohn remain valid
1135 1135 if par:
1136 1136 try:
1137 1137 logfname,logmode = par.split()
1138 1138 except:
1139 1139 logfname = par
1140 1140 logmode = 'backup'
1141 1141 else:
1142 1142 logfname = logger.logfname
1143 1143 logmode = logger.logmode
1144 1144 # put logfname into rc struct as if it had been called on the command
1145 1145 # line, so it ends up saved in the log header Save it in case we need
1146 1146 # to restore it...
1147 1147 old_logfile = rc.opts.get('logfile','')
1148 1148 if logfname:
1149 1149 logfname = os.path.expanduser(logfname)
1150 1150 rc.opts.logfile = logfname
1151 1151 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1152 1152 try:
1153 1153 started = logger.logstart(logfname,loghead,logmode,
1154 1154 log_output,timestamp,log_raw_input)
1155 1155 except:
1156 1156 rc.opts.logfile = old_logfile
1157 1157 warn("Couldn't start log: %s" % sys.exc_info()[1])
1158 1158 else:
1159 1159 # log input history up to this point, optionally interleaving
1160 1160 # output if requested
1161 1161
1162 1162 if timestamp:
1163 1163 # disable timestamping for the previous history, since we've
1164 1164 # lost those already (no time machine here).
1165 1165 logger.timestamp = False
1166 1166
1167 1167 if log_raw_input:
1168 1168 input_hist = self.shell.input_hist_raw
1169 1169 else:
1170 1170 input_hist = self.shell.input_hist
1171 1171
1172 1172 if log_output:
1173 1173 log_write = logger.log_write
1174 1174 output_hist = self.shell.output_hist
1175 1175 for n in range(1,len(input_hist)-1):
1176 1176 log_write(input_hist[n].rstrip())
1177 1177 if n in output_hist:
1178 1178 log_write(repr(output_hist[n]),'output')
1179 1179 else:
1180 1180 logger.log_write(input_hist[1:])
1181 1181 if timestamp:
1182 1182 # re-enable timestamping
1183 1183 logger.timestamp = True
1184 1184
1185 1185 print ('Activating auto-logging. '
1186 1186 'Current session state plus future input saved.')
1187 1187 logger.logstate()
1188 1188
1189 1189 def magic_logoff(self,parameter_s=''):
1190 1190 """Temporarily stop logging.
1191 1191
1192 1192 You must have previously started logging."""
1193 1193 self.shell.logger.switch_log(0)
1194 1194
1195 1195 def magic_logon(self,parameter_s=''):
1196 1196 """Restart logging.
1197 1197
1198 1198 This function is for restarting logging which you've temporarily
1199 1199 stopped with %logoff. For starting logging for the first time, you
1200 1200 must use the %logstart function, which allows you to specify an
1201 1201 optional log filename."""
1202 1202
1203 1203 self.shell.logger.switch_log(1)
1204 1204
1205 1205 def magic_logstate(self,parameter_s=''):
1206 1206 """Print the status of the logging system."""
1207 1207
1208 1208 self.shell.logger.logstate()
1209 1209
1210 1210 def magic_pdb(self, parameter_s=''):
1211 1211 """Control the automatic calling of the pdb interactive debugger.
1212 1212
1213 1213 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1214 1214 argument it works as a toggle.
1215 1215
1216 1216 When an exception is triggered, IPython can optionally call the
1217 1217 interactive pdb debugger after the traceback printout. %pdb toggles
1218 1218 this feature on and off.
1219 1219
1220 1220 The initial state of this feature is set in your ipythonrc
1221 1221 configuration file (the variable is called 'pdb').
1222 1222
1223 1223 If you want to just activate the debugger AFTER an exception has fired,
1224 1224 without having to type '%pdb on' and rerunning your code, you can use
1225 1225 the %debug magic."""
1226 1226
1227 1227 par = parameter_s.strip().lower()
1228 1228
1229 1229 if par:
1230 1230 try:
1231 1231 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1232 1232 except KeyError:
1233 1233 print ('Incorrect argument. Use on/1, off/0, '
1234 1234 'or nothing for a toggle.')
1235 1235 return
1236 1236 else:
1237 1237 # toggle
1238 1238 new_pdb = not self.shell.call_pdb
1239 1239
1240 1240 # set on the shell
1241 1241 self.shell.call_pdb = new_pdb
1242 1242 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1243 1243
1244 1244 def magic_debug(self, parameter_s=''):
1245 1245 """Activate the interactive debugger in post-mortem mode.
1246 1246
1247 1247 If an exception has just occurred, this lets you inspect its stack
1248 1248 frames interactively. Note that this will always work only on the last
1249 1249 traceback that occurred, so you must call this quickly after an
1250 1250 exception that you wish to inspect has fired, because if another one
1251 1251 occurs, it clobbers the previous one.
1252 1252
1253 1253 If you want IPython to automatically do this on every exception, see
1254 1254 the %pdb magic for more details.
1255 1255 """
1256 1256
1257 1257 self.shell.debugger(force=True)
1258 1258
1259 1259 def magic_prun(self, parameter_s ='',user_mode=1,
1260 1260 opts=None,arg_lst=None,prog_ns=None):
1261 1261
1262 1262 """Run a statement through the python code profiler.
1263 1263
1264 1264 Usage:\\
1265 1265 %prun [options] statement
1266 1266
1267 1267 The given statement (which doesn't require quote marks) is run via the
1268 1268 python profiler in a manner similar to the profile.run() function.
1269 1269 Namespaces are internally managed to work correctly; profile.run
1270 1270 cannot be used in IPython because it makes certain assumptions about
1271 1271 namespaces which do not hold under IPython.
1272 1272
1273 1273 Options:
1274 1274
1275 1275 -l <limit>: you can place restrictions on what or how much of the
1276 1276 profile gets printed. The limit value can be:
1277 1277
1278 1278 * A string: only information for function names containing this string
1279 1279 is printed.
1280 1280
1281 1281 * An integer: only these many lines are printed.
1282 1282
1283 1283 * A float (between 0 and 1): this fraction of the report is printed
1284 1284 (for example, use a limit of 0.4 to see the topmost 40% only).
1285 1285
1286 1286 You can combine several limits with repeated use of the option. For
1287 1287 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1288 1288 information about class constructors.
1289 1289
1290 1290 -r: return the pstats.Stats object generated by the profiling. This
1291 1291 object has all the information about the profile in it, and you can
1292 1292 later use it for further analysis or in other functions.
1293 1293
1294 1294 -s <key>: sort profile by given key. You can provide more than one key
1295 1295 by using the option several times: '-s key1 -s key2 -s key3...'. The
1296 1296 default sorting key is 'time'.
1297 1297
1298 1298 The following is copied verbatim from the profile documentation
1299 1299 referenced below:
1300 1300
1301 1301 When more than one key is provided, additional keys are used as
1302 1302 secondary criteria when the there is equality in all keys selected
1303 1303 before them.
1304 1304
1305 1305 Abbreviations can be used for any key names, as long as the
1306 1306 abbreviation is unambiguous. The following are the keys currently
1307 1307 defined:
1308 1308
1309 1309 Valid Arg Meaning\\
1310 1310 "calls" call count\\
1311 1311 "cumulative" cumulative time\\
1312 1312 "file" file name\\
1313 1313 "module" file name\\
1314 1314 "pcalls" primitive call count\\
1315 1315 "line" line number\\
1316 1316 "name" function name\\
1317 1317 "nfl" name/file/line\\
1318 1318 "stdname" standard name\\
1319 1319 "time" internal time
1320 1320
1321 1321 Note that all sorts on statistics are in descending order (placing
1322 1322 most time consuming items first), where as name, file, and line number
1323 1323 searches are in ascending order (i.e., alphabetical). The subtle
1324 1324 distinction between "nfl" and "stdname" is that the standard name is a
1325 1325 sort of the name as printed, which means that the embedded line
1326 1326 numbers get compared in an odd way. For example, lines 3, 20, and 40
1327 1327 would (if the file names were the same) appear in the string order
1328 1328 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1329 1329 line numbers. In fact, sort_stats("nfl") is the same as
1330 1330 sort_stats("name", "file", "line").
1331 1331
1332 1332 -T <filename>: save profile results as shown on screen to a text
1333 1333 file. The profile is still shown on screen.
1334 1334
1335 1335 -D <filename>: save (via dump_stats) profile statistics to given
1336 1336 filename. This data is in a format understod by the pstats module, and
1337 1337 is generated by a call to the dump_stats() method of profile
1338 1338 objects. The profile is still shown on screen.
1339 1339
1340 1340 If you want to run complete programs under the profiler's control, use
1341 1341 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1342 1342 contains profiler specific options as described here.
1343 1343
1344 1344 You can read the complete documentation for the profile module with:\\
1345 1345 In [1]: import profile; profile.help() """
1346 1346
1347 1347 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1348 1348 # protect user quote marks
1349 1349 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1350 1350
1351 1351 if user_mode: # regular user call
1352 1352 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1353 1353 list_all=1)
1354 1354 namespace = self.shell.user_ns
1355 1355 else: # called to run a program by %run -p
1356 1356 try:
1357 1357 filename = get_py_filename(arg_lst[0])
1358 1358 except IOError,msg:
1359 1359 error(msg)
1360 1360 return
1361 1361
1362 1362 arg_str = 'execfile(filename,prog_ns)'
1363 1363 namespace = locals()
1364 1364
1365 1365 opts.merge(opts_def)
1366 1366
1367 1367 prof = profile.Profile()
1368 1368 try:
1369 1369 prof = prof.runctx(arg_str,namespace,namespace)
1370 1370 sys_exit = ''
1371 1371 except SystemExit:
1372 1372 sys_exit = """*** SystemExit exception caught in code being profiled."""
1373 1373
1374 1374 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1375 1375
1376 1376 lims = opts.l
1377 1377 if lims:
1378 1378 lims = [] # rebuild lims with ints/floats/strings
1379 1379 for lim in opts.l:
1380 1380 try:
1381 1381 lims.append(int(lim))
1382 1382 except ValueError:
1383 1383 try:
1384 1384 lims.append(float(lim))
1385 1385 except ValueError:
1386 1386 lims.append(lim)
1387 1387
1388 1388 # Trap output.
1389 1389 stdout_trap = StringIO()
1390 1390
1391 1391 if hasattr(stats,'stream'):
1392 1392 # In newer versions of python, the stats object has a 'stream'
1393 1393 # attribute to write into.
1394 1394 stats.stream = stdout_trap
1395 1395 stats.print_stats(*lims)
1396 1396 else:
1397 1397 # For older versions, we manually redirect stdout during printing
1398 1398 sys_stdout = sys.stdout
1399 1399 try:
1400 1400 sys.stdout = stdout_trap
1401 1401 stats.print_stats(*lims)
1402 1402 finally:
1403 1403 sys.stdout = sys_stdout
1404 1404
1405 1405 output = stdout_trap.getvalue()
1406 1406 output = output.rstrip()
1407 1407
1408 1408 page(output,screen_lines=self.shell.rc.screen_length)
1409 1409 print sys_exit,
1410 1410
1411 1411 dump_file = opts.D[0]
1412 1412 text_file = opts.T[0]
1413 1413 if dump_file:
1414 1414 prof.dump_stats(dump_file)
1415 1415 print '\n*** Profile stats marshalled to file',\
1416 1416 `dump_file`+'.',sys_exit
1417 1417 if text_file:
1418 1418 pfile = file(text_file,'w')
1419 1419 pfile.write(output)
1420 1420 pfile.close()
1421 1421 print '\n*** Profile printout saved to text file',\
1422 1422 `text_file`+'.',sys_exit
1423 1423
1424 1424 if opts.has_key('r'):
1425 1425 return stats
1426 1426 else:
1427 1427 return None
1428 1428
1429 1429 def magic_run(self, parameter_s ='',runner=None):
1430 1430 """Run the named file inside IPython as a program.
1431 1431
1432 1432 Usage:\\
1433 1433 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1434 1434
1435 1435 Parameters after the filename are passed as command-line arguments to
1436 1436 the program (put in sys.argv). Then, control returns to IPython's
1437 1437 prompt.
1438 1438
1439 1439 This is similar to running at a system prompt:\\
1440 1440 $ python file args\\
1441 1441 but with the advantage of giving you IPython's tracebacks, and of
1442 1442 loading all variables into your interactive namespace for further use
1443 1443 (unless -p is used, see below).
1444 1444
1445 1445 The file is executed in a namespace initially consisting only of
1446 1446 __name__=='__main__' and sys.argv constructed as indicated. It thus
1447 1447 sees its environment as if it were being run as a stand-alone
1448 1448 program. But after execution, the IPython interactive namespace gets
1449 1449 updated with all variables defined in the program (except for __name__
1450 1450 and sys.argv). This allows for very convenient loading of code for
1451 1451 interactive work, while giving each program a 'clean sheet' to run in.
1452 1452
1453 1453 Options:
1454 1454
1455 1455 -n: __name__ is NOT set to '__main__', but to the running file's name
1456 1456 without extension (as python does under import). This allows running
1457 1457 scripts and reloading the definitions in them without calling code
1458 1458 protected by an ' if __name__ == "__main__" ' clause.
1459 1459
1460 1460 -i: run the file in IPython's namespace instead of an empty one. This
1461 1461 is useful if you are experimenting with code written in a text editor
1462 1462 which depends on variables defined interactively.
1463 1463
1464 1464 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1465 1465 being run. This is particularly useful if IPython is being used to
1466 1466 run unittests, which always exit with a sys.exit() call. In such
1467 1467 cases you are interested in the output of the test results, not in
1468 1468 seeing a traceback of the unittest module.
1469 1469
1470 1470 -t: print timing information at the end of the run. IPython will give
1471 1471 you an estimated CPU time consumption for your script, which under
1472 1472 Unix uses the resource module to avoid the wraparound problems of
1473 1473 time.clock(). Under Unix, an estimate of time spent on system tasks
1474 1474 is also given (for Windows platforms this is reported as 0.0).
1475 1475
1476 1476 If -t is given, an additional -N<N> option can be given, where <N>
1477 1477 must be an integer indicating how many times you want the script to
1478 1478 run. The final timing report will include total and per run results.
1479 1479
1480 1480 For example (testing the script uniq_stable.py):
1481 1481
1482 1482 In [1]: run -t uniq_stable
1483 1483
1484 1484 IPython CPU timings (estimated):\\
1485 1485 User : 0.19597 s.\\
1486 1486 System: 0.0 s.\\
1487 1487
1488 1488 In [2]: run -t -N5 uniq_stable
1489 1489
1490 1490 IPython CPU timings (estimated):\\
1491 1491 Total runs performed: 5\\
1492 1492 Times : Total Per run\\
1493 1493 User : 0.910862 s, 0.1821724 s.\\
1494 1494 System: 0.0 s, 0.0 s.
1495 1495
1496 1496 -d: run your program under the control of pdb, the Python debugger.
1497 1497 This allows you to execute your program step by step, watch variables,
1498 1498 etc. Internally, what IPython does is similar to calling:
1499 1499
1500 1500 pdb.run('execfile("YOURFILENAME")')
1501 1501
1502 1502 with a breakpoint set on line 1 of your file. You can change the line
1503 1503 number for this automatic breakpoint to be <N> by using the -bN option
1504 1504 (where N must be an integer). For example:
1505 1505
1506 1506 %run -d -b40 myscript
1507 1507
1508 1508 will set the first breakpoint at line 40 in myscript.py. Note that
1509 1509 the first breakpoint must be set on a line which actually does
1510 1510 something (not a comment or docstring) for it to stop execution.
1511 1511
1512 1512 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1513 1513 first enter 'c' (without qoutes) to start execution up to the first
1514 1514 breakpoint.
1515 1515
1516 1516 Entering 'help' gives information about the use of the debugger. You
1517 1517 can easily see pdb's full documentation with "import pdb;pdb.help()"
1518 1518 at a prompt.
1519 1519
1520 1520 -p: run program under the control of the Python profiler module (which
1521 1521 prints a detailed report of execution times, function calls, etc).
1522 1522
1523 1523 You can pass other options after -p which affect the behavior of the
1524 1524 profiler itself. See the docs for %prun for details.
1525 1525
1526 1526 In this mode, the program's variables do NOT propagate back to the
1527 1527 IPython interactive namespace (because they remain in the namespace
1528 1528 where the profiler executes them).
1529 1529
1530 1530 Internally this triggers a call to %prun, see its documentation for
1531 1531 details on the options available specifically for profiling.
1532 1532
1533 1533 There is one special usage for which the text above doesn't apply:
1534 1534 if the filename ends with .ipy, the file is run as ipython script,
1535 1535 just as if the commands were written on IPython prompt.
1536 1536 """
1537 1537
1538 1538 # get arguments and set sys.argv for program to be run.
1539 1539 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1540 1540 mode='list',list_all=1)
1541 1541
1542 1542 try:
1543 1543 filename = get_py_filename(arg_lst[0])
1544 1544 except IndexError:
1545 1545 warn('you must provide at least a filename.')
1546 1546 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1547 1547 return
1548 1548 except IOError,msg:
1549 1549 error(msg)
1550 1550 return
1551 1551
1552 1552 if filename.lower().endswith('.ipy'):
1553 1553 self.api.runlines(open(filename).read())
1554 1554 return
1555 1555
1556 1556 # Control the response to exit() calls made by the script being run
1557 1557 exit_ignore = opts.has_key('e')
1558 1558
1559 1559 # Make sure that the running script gets a proper sys.argv as if it
1560 1560 # were run from a system shell.
1561 1561 save_argv = sys.argv # save it for later restoring
1562 1562 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1563 1563
1564 1564 if opts.has_key('i'):
1565 1565 prog_ns = self.shell.user_ns
1566 1566 __name__save = self.shell.user_ns['__name__']
1567 1567 prog_ns['__name__'] = '__main__'
1568 1568 else:
1569 1569 if opts.has_key('n'):
1570 1570 name = os.path.splitext(os.path.basename(filename))[0]
1571 1571 else:
1572 1572 name = '__main__'
1573 1573 prog_ns = {'__name__':name}
1574 1574
1575 1575 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1576 1576 # set the __file__ global in the script's namespace
1577 1577 prog_ns['__file__'] = filename
1578 1578
1579 1579 # pickle fix. See iplib for an explanation. But we need to make sure
1580 1580 # that, if we overwrite __main__, we replace it at the end
1581 1581 if prog_ns['__name__'] == '__main__':
1582 1582 restore_main = sys.modules['__main__']
1583 1583 else:
1584 1584 restore_main = False
1585 1585
1586 1586 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1587 1587
1588 1588 stats = None
1589 1589 try:
1590 1590 if self.shell.has_readline:
1591 1591 self.shell.savehist()
1592 1592
1593 1593 if opts.has_key('p'):
1594 1594 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1595 1595 else:
1596 1596 if opts.has_key('d'):
1597 1597 deb = Debugger.Pdb(self.shell.rc.colors)
1598 1598 # reset Breakpoint state, which is moronically kept
1599 1599 # in a class
1600 1600 bdb.Breakpoint.next = 1
1601 1601 bdb.Breakpoint.bplist = {}
1602 1602 bdb.Breakpoint.bpbynumber = [None]
1603 1603 # Set an initial breakpoint to stop execution
1604 1604 maxtries = 10
1605 1605 bp = int(opts.get('b',[1])[0])
1606 1606 checkline = deb.checkline(filename,bp)
1607 1607 if not checkline:
1608 1608 for bp in range(bp+1,bp+maxtries+1):
1609 1609 if deb.checkline(filename,bp):
1610 1610 break
1611 1611 else:
1612 1612 msg = ("\nI failed to find a valid line to set "
1613 1613 "a breakpoint\n"
1614 1614 "after trying up to line: %s.\n"
1615 1615 "Please set a valid breakpoint manually "
1616 1616 "with the -b option." % bp)
1617 1617 error(msg)
1618 1618 return
1619 1619 # if we find a good linenumber, set the breakpoint
1620 1620 deb.do_break('%s:%s' % (filename,bp))
1621 1621 # Start file run
1622 1622 print "NOTE: Enter 'c' at the",
1623 1623 print "%s prompt to start your script." % deb.prompt
1624 1624 try:
1625 1625 deb.run('execfile("%s")' % filename,prog_ns)
1626 1626
1627 1627 except:
1628 1628 etype, value, tb = sys.exc_info()
1629 1629 # Skip three frames in the traceback: the %run one,
1630 1630 # one inside bdb.py, and the command-line typed by the
1631 1631 # user (run by exec in pdb itself).
1632 1632 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1633 1633 else:
1634 1634 if runner is None:
1635 1635 runner = self.shell.safe_execfile
1636 1636 if opts.has_key('t'):
1637 1637 try:
1638 1638 nruns = int(opts['N'][0])
1639 1639 if nruns < 1:
1640 1640 error('Number of runs must be >=1')
1641 1641 return
1642 1642 except (KeyError):
1643 1643 nruns = 1
1644 1644 if nruns == 1:
1645 1645 t0 = clock2()
1646 1646 runner(filename,prog_ns,prog_ns,
1647 1647 exit_ignore=exit_ignore)
1648 1648 t1 = clock2()
1649 1649 t_usr = t1[0]-t0[0]
1650 1650 t_sys = t1[1]-t1[1]
1651 1651 print "\nIPython CPU timings (estimated):"
1652 1652 print " User : %10s s." % t_usr
1653 1653 print " System: %10s s." % t_sys
1654 1654 else:
1655 1655 runs = range(nruns)
1656 1656 t0 = clock2()
1657 1657 for nr in runs:
1658 1658 runner(filename,prog_ns,prog_ns,
1659 1659 exit_ignore=exit_ignore)
1660 1660 t1 = clock2()
1661 1661 t_usr = t1[0]-t0[0]
1662 1662 t_sys = t1[1]-t1[1]
1663 1663 print "\nIPython CPU timings (estimated):"
1664 1664 print "Total runs performed:",nruns
1665 1665 print " Times : %10s %10s" % ('Total','Per run')
1666 1666 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1667 1667 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1668 1668
1669 1669 else:
1670 1670 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1671 1671 if opts.has_key('i'):
1672 1672 self.shell.user_ns['__name__'] = __name__save
1673 1673 else:
1674 1674 # update IPython interactive namespace
1675 1675 del prog_ns['__name__']
1676 1676 self.shell.user_ns.update(prog_ns)
1677 1677 finally:
1678 1678 sys.argv = save_argv
1679 1679 if restore_main:
1680 1680 sys.modules['__main__'] = restore_main
1681 1681 self.shell.reloadhist()
1682 1682
1683 1683 return stats
1684 1684
1685 1685 def magic_runlog(self, parameter_s =''):
1686 1686 """Run files as logs.
1687 1687
1688 1688 Usage:\\
1689 1689 %runlog file1 file2 ...
1690 1690
1691 1691 Run the named files (treating them as log files) in sequence inside
1692 1692 the interpreter, and return to the prompt. This is much slower than
1693 1693 %run because each line is executed in a try/except block, but it
1694 1694 allows running files with syntax errors in them.
1695 1695
1696 1696 Normally IPython will guess when a file is one of its own logfiles, so
1697 1697 you can typically use %run even for logs. This shorthand allows you to
1698 1698 force any file to be treated as a log file."""
1699 1699
1700 1700 for f in parameter_s.split():
1701 1701 self.shell.safe_execfile(f,self.shell.user_ns,
1702 1702 self.shell.user_ns,islog=1)
1703 1703
1704 1704 def magic_timeit(self, parameter_s =''):
1705 1705 """Time execution of a Python statement or expression
1706 1706
1707 1707 Usage:\\
1708 1708 %timeit [-n<N> -r<R> [-t|-c]] statement
1709 1709
1710 1710 Time execution of a Python statement or expression using the timeit
1711 1711 module.
1712 1712
1713 1713 Options:
1714 1714 -n<N>: execute the given statement <N> times in a loop. If this value
1715 1715 is not given, a fitting value is chosen.
1716 1716
1717 1717 -r<R>: repeat the loop iteration <R> times and take the best result.
1718 1718 Default: 3
1719 1719
1720 1720 -t: use time.time to measure the time, which is the default on Unix.
1721 1721 This function measures wall time.
1722 1722
1723 1723 -c: use time.clock to measure the time, which is the default on
1724 1724 Windows and measures wall time. On Unix, resource.getrusage is used
1725 1725 instead and returns the CPU user time.
1726 1726
1727 1727 -p<P>: use a precision of <P> digits to display the timing result.
1728 1728 Default: 3
1729 1729
1730 1730
1731 1731 Examples:\\
1732 1732 In [1]: %timeit pass
1733 1733 10000000 loops, best of 3: 53.3 ns per loop
1734 1734
1735 1735 In [2]: u = None
1736 1736
1737 1737 In [3]: %timeit u is None
1738 1738 10000000 loops, best of 3: 184 ns per loop
1739 1739
1740 1740 In [4]: %timeit -r 4 u == None
1741 1741 1000000 loops, best of 4: 242 ns per loop
1742 1742
1743 1743 In [5]: import time
1744 1744
1745 1745 In [6]: %timeit -n1 time.sleep(2)
1746 1746 1 loops, best of 3: 2 s per loop
1747 1747
1748 1748
1749 1749 The times reported by %timeit will be slightly higher than those
1750 1750 reported by the timeit.py script when variables are accessed. This is
1751 1751 due to the fact that %timeit executes the statement in the namespace
1752 1752 of the shell, compared with timeit.py, which uses a single setup
1753 1753 statement to import function or create variables. Generally, the bias
1754 1754 does not matter as long as results from timeit.py are not mixed with
1755 1755 those from %timeit."""
1756 1756
1757 1757 import timeit
1758 1758 import math
1759 1759
1760 1760 units = ["s", "ms", "\xc2\xb5s", "ns"]
1761 1761 scaling = [1, 1e3, 1e6, 1e9]
1762 1762
1763 1763 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1764 1764 posix=False)
1765 1765 if stmt == "":
1766 1766 return
1767 1767 timefunc = timeit.default_timer
1768 1768 number = int(getattr(opts, "n", 0))
1769 1769 repeat = int(getattr(opts, "r", timeit.default_repeat))
1770 1770 precision = int(getattr(opts, "p", 3))
1771 1771 if hasattr(opts, "t"):
1772 1772 timefunc = time.time
1773 1773 if hasattr(opts, "c"):
1774 1774 timefunc = clock
1775 1775
1776 1776 timer = timeit.Timer(timer=timefunc)
1777 1777 # this code has tight coupling to the inner workings of timeit.Timer,
1778 1778 # but is there a better way to achieve that the code stmt has access
1779 1779 # to the shell namespace?
1780 1780
1781 1781 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1782 1782 'setup': "pass"}
1783 1783 code = compile(src, "<magic-timeit>", "exec")
1784 1784 ns = {}
1785 1785 exec code in self.shell.user_ns, ns
1786 1786 timer.inner = ns["inner"]
1787 1787
1788 1788 if number == 0:
1789 1789 # determine number so that 0.2 <= total time < 2.0
1790 1790 number = 1
1791 1791 for i in range(1, 10):
1792 1792 number *= 10
1793 1793 if timer.timeit(number) >= 0.2:
1794 1794 break
1795 1795
1796 1796 best = min(timer.repeat(repeat, number)) / number
1797 1797
1798 1798 if best > 0.0:
1799 1799 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1800 1800 else:
1801 1801 order = 3
1802 1802 print "%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1803 1803 precision,
1804 1804 best * scaling[order],
1805 1805 units[order])
1806 1806
1807 1807 def magic_time(self,parameter_s = ''):
1808 1808 """Time execution of a Python statement or expression.
1809 1809
1810 1810 The CPU and wall clock times are printed, and the value of the
1811 1811 expression (if any) is returned. Note that under Win32, system time
1812 1812 is always reported as 0, since it can not be measured.
1813 1813
1814 1814 This function provides very basic timing functionality. In Python
1815 1815 2.3, the timeit module offers more control and sophistication, so this
1816 1816 could be rewritten to use it (patches welcome).
1817 1817
1818 1818 Some examples:
1819 1819
1820 1820 In [1]: time 2**128
1821 1821 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1822 1822 Wall time: 0.00
1823 1823 Out[1]: 340282366920938463463374607431768211456L
1824 1824
1825 1825 In [2]: n = 1000000
1826 1826
1827 1827 In [3]: time sum(range(n))
1828 1828 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1829 1829 Wall time: 1.37
1830 1830 Out[3]: 499999500000L
1831 1831
1832 1832 In [4]: time print 'hello world'
1833 1833 hello world
1834 1834 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1835 1835 Wall time: 0.00
1836 1836 """
1837 1837
1838 1838 # fail immediately if the given expression can't be compiled
1839 1839 try:
1840 1840 mode = 'eval'
1841 1841 code = compile(parameter_s,'<timed eval>',mode)
1842 1842 except SyntaxError:
1843 1843 mode = 'exec'
1844 1844 code = compile(parameter_s,'<timed exec>',mode)
1845 1845 # skew measurement as little as possible
1846 1846 glob = self.shell.user_ns
1847 1847 clk = clock2
1848 1848 wtime = time.time
1849 1849 # time execution
1850 1850 wall_st = wtime()
1851 1851 if mode=='eval':
1852 1852 st = clk()
1853 1853 out = eval(code,glob)
1854 1854 end = clk()
1855 1855 else:
1856 1856 st = clk()
1857 1857 exec code in glob
1858 1858 end = clk()
1859 1859 out = None
1860 1860 wall_end = wtime()
1861 1861 # Compute actual times and report
1862 1862 wall_time = wall_end-wall_st
1863 1863 cpu_user = end[0]-st[0]
1864 1864 cpu_sys = end[1]-st[1]
1865 1865 cpu_tot = cpu_user+cpu_sys
1866 1866 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1867 1867 (cpu_user,cpu_sys,cpu_tot)
1868 1868 print "Wall time: %.2f" % wall_time
1869 1869 return out
1870 1870
1871 1871 def magic_macro(self,parameter_s = ''):
1872 1872 """Define a set of input lines as a macro for future re-execution.
1873 1873
1874 1874 Usage:\\
1875 1875 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1876 1876
1877 1877 Options:
1878 1878
1879 1879 -r: use 'raw' input. By default, the 'processed' history is used,
1880 1880 so that magics are loaded in their transformed version to valid
1881 1881 Python. If this option is given, the raw input as typed as the
1882 1882 command line is used instead.
1883 1883
1884 1884 This will define a global variable called `name` which is a string
1885 1885 made of joining the slices and lines you specify (n1,n2,... numbers
1886 1886 above) from your input history into a single string. This variable
1887 1887 acts like an automatic function which re-executes those lines as if
1888 1888 you had typed them. You just type 'name' at the prompt and the code
1889 1889 executes.
1890 1890
1891 1891 The notation for indicating number ranges is: n1-n2 means 'use line
1892 1892 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1893 1893 using the lines numbered 5,6 and 7.
1894 1894
1895 1895 Note: as a 'hidden' feature, you can also use traditional python slice
1896 1896 notation, where N:M means numbers N through M-1.
1897 1897
1898 1898 For example, if your history contains (%hist prints it):
1899 1899
1900 1900 44: x=1\\
1901 1901 45: y=3\\
1902 1902 46: z=x+y\\
1903 1903 47: print x\\
1904 1904 48: a=5\\
1905 1905 49: print 'x',x,'y',y\\
1906 1906
1907 1907 you can create a macro with lines 44 through 47 (included) and line 49
1908 1908 called my_macro with:
1909 1909
1910 1910 In [51]: %macro my_macro 44-47 49
1911 1911
1912 1912 Now, typing `my_macro` (without quotes) will re-execute all this code
1913 1913 in one pass.
1914 1914
1915 1915 You don't need to give the line-numbers in order, and any given line
1916 1916 number can appear multiple times. You can assemble macros with any
1917 1917 lines from your input history in any order.
1918 1918
1919 1919 The macro is a simple object which holds its value in an attribute,
1920 1920 but IPython's display system checks for macros and executes them as
1921 1921 code instead of printing them when you type their name.
1922 1922
1923 1923 You can view a macro's contents by explicitly printing it with:
1924 1924
1925 1925 'print macro_name'.
1926 1926
1927 1927 For one-off cases which DON'T contain magic function calls in them you
1928 1928 can obtain similar results by explicitly executing slices from your
1929 1929 input history with:
1930 1930
1931 1931 In [60]: exec In[44:48]+In[49]"""
1932 1932
1933 1933 opts,args = self.parse_options(parameter_s,'r',mode='list')
1934 1934 name,ranges = args[0], args[1:]
1935 1935 #print 'rng',ranges # dbg
1936 1936 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1937 1937 macro = Macro(lines)
1938 1938 self.shell.user_ns.update({name:macro})
1939 1939 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1940 1940 print 'Macro contents:'
1941 1941 print macro,
1942 1942
1943 1943 def magic_save(self,parameter_s = ''):
1944 1944 """Save a set of lines to a given filename.
1945 1945
1946 1946 Usage:\\
1947 1947 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1948 1948
1949 1949 Options:
1950 1950
1951 1951 -r: use 'raw' input. By default, the 'processed' history is used,
1952 1952 so that magics are loaded in their transformed version to valid
1953 1953 Python. If this option is given, the raw input as typed as the
1954 1954 command line is used instead.
1955 1955
1956 1956 This function uses the same syntax as %macro for line extraction, but
1957 1957 instead of creating a macro it saves the resulting string to the
1958 1958 filename you specify.
1959 1959
1960 1960 It adds a '.py' extension to the file if you don't do so yourself, and
1961 1961 it asks for confirmation before overwriting existing files."""
1962 1962
1963 1963 opts,args = self.parse_options(parameter_s,'r',mode='list')
1964 1964 fname,ranges = args[0], args[1:]
1965 1965 if not fname.endswith('.py'):
1966 1966 fname += '.py'
1967 1967 if os.path.isfile(fname):
1968 1968 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1969 1969 if ans.lower() not in ['y','yes']:
1970 1970 print 'Operation cancelled.'
1971 1971 return
1972 1972 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1973 1973 f = file(fname,'w')
1974 1974 f.write(cmds)
1975 1975 f.close()
1976 1976 print 'The following commands were written to file `%s`:' % fname
1977 1977 print cmds
1978 1978
1979 1979 def _edit_macro(self,mname,macro):
1980 1980 """open an editor with the macro data in a file"""
1981 1981 filename = self.shell.mktempfile(macro.value)
1982 1982 self.shell.hooks.editor(filename)
1983 1983
1984 1984 # and make a new macro object, to replace the old one
1985 1985 mfile = open(filename)
1986 1986 mvalue = mfile.read()
1987 1987 mfile.close()
1988 1988 self.shell.user_ns[mname] = Macro(mvalue)
1989 1989
1990 1990 def magic_ed(self,parameter_s=''):
1991 1991 """Alias to %edit."""
1992 1992 return self.magic_edit(parameter_s)
1993 1993
1994 1994 def magic_edit(self,parameter_s='',last_call=['','']):
1995 1995 """Bring up an editor and execute the resulting code.
1996 1996
1997 1997 Usage:
1998 1998 %edit [options] [args]
1999 1999
2000 2000 %edit runs IPython's editor hook. The default version of this hook is
2001 2001 set to call the __IPYTHON__.rc.editor command. This is read from your
2002 2002 environment variable $EDITOR. If this isn't found, it will default to
2003 2003 vi under Linux/Unix and to notepad under Windows. See the end of this
2004 2004 docstring for how to change the editor hook.
2005 2005
2006 2006 You can also set the value of this editor via the command line option
2007 2007 '-editor' or in your ipythonrc file. This is useful if you wish to use
2008 2008 specifically for IPython an editor different from your typical default
2009 2009 (and for Windows users who typically don't set environment variables).
2010 2010
2011 2011 This command allows you to conveniently edit multi-line code right in
2012 2012 your IPython session.
2013 2013
2014 2014 If called without arguments, %edit opens up an empty editor with a
2015 2015 temporary file and will execute the contents of this file when you
2016 2016 close it (don't forget to save it!).
2017 2017
2018 2018
2019 2019 Options:
2020 2020
2021 2021 -n <number>: open the editor at a specified line number. By default,
2022 2022 the IPython editor hook uses the unix syntax 'editor +N filename', but
2023 2023 you can configure this by providing your own modified hook if your
2024 2024 favorite editor supports line-number specifications with a different
2025 2025 syntax.
2026 2026
2027 2027 -p: this will call the editor with the same data as the previous time
2028 2028 it was used, regardless of how long ago (in your current session) it
2029 2029 was.
2030 2030
2031 2031 -r: use 'raw' input. This option only applies to input taken from the
2032 2032 user's history. By default, the 'processed' history is used, so that
2033 2033 magics are loaded in their transformed version to valid Python. If
2034 2034 this option is given, the raw input as typed as the command line is
2035 2035 used instead. When you exit the editor, it will be executed by
2036 2036 IPython's own processor.
2037 2037
2038 2038 -x: do not execute the edited code immediately upon exit. This is
2039 2039 mainly useful if you are editing programs which need to be called with
2040 2040 command line arguments, which you can then do using %run.
2041 2041
2042 2042
2043 2043 Arguments:
2044 2044
2045 2045 If arguments are given, the following possibilites exist:
2046 2046
2047 2047 - The arguments are numbers or pairs of colon-separated numbers (like
2048 2048 1 4:8 9). These are interpreted as lines of previous input to be
2049 2049 loaded into the editor. The syntax is the same of the %macro command.
2050 2050
2051 2051 - If the argument doesn't start with a number, it is evaluated as a
2052 2052 variable and its contents loaded into the editor. You can thus edit
2053 2053 any string which contains python code (including the result of
2054 2054 previous edits).
2055 2055
2056 2056 - If the argument is the name of an object (other than a string),
2057 2057 IPython will try to locate the file where it was defined and open the
2058 2058 editor at the point where it is defined. You can use `%edit function`
2059 2059 to load an editor exactly at the point where 'function' is defined,
2060 2060 edit it and have the file be executed automatically.
2061 2061
2062 2062 If the object is a macro (see %macro for details), this opens up your
2063 2063 specified editor with a temporary file containing the macro's data.
2064 2064 Upon exit, the macro is reloaded with the contents of the file.
2065 2065
2066 2066 Note: opening at an exact line is only supported under Unix, and some
2067 2067 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2068 2068 '+NUMBER' parameter necessary for this feature. Good editors like
2069 2069 (X)Emacs, vi, jed, pico and joe all do.
2070 2070
2071 2071 - If the argument is not found as a variable, IPython will look for a
2072 2072 file with that name (adding .py if necessary) and load it into the
2073 2073 editor. It will execute its contents with execfile() when you exit,
2074 2074 loading any code in the file into your interactive namespace.
2075 2075
2076 2076 After executing your code, %edit will return as output the code you
2077 2077 typed in the editor (except when it was an existing file). This way
2078 2078 you can reload the code in further invocations of %edit as a variable,
2079 2079 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2080 2080 the output.
2081 2081
2082 2082 Note that %edit is also available through the alias %ed.
2083 2083
2084 2084 This is an example of creating a simple function inside the editor and
2085 2085 then modifying it. First, start up the editor:
2086 2086
2087 2087 In [1]: ed\\
2088 2088 Editing... done. Executing edited code...\\
2089 2089 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
2090 2090
2091 2091 We can then call the function foo():
2092 2092
2093 2093 In [2]: foo()\\
2094 2094 foo() was defined in an editing session
2095 2095
2096 2096 Now we edit foo. IPython automatically loads the editor with the
2097 2097 (temporary) file where foo() was previously defined:
2098 2098
2099 2099 In [3]: ed foo\\
2100 2100 Editing... done. Executing edited code...
2101 2101
2102 2102 And if we call foo() again we get the modified version:
2103 2103
2104 2104 In [4]: foo()\\
2105 2105 foo() has now been changed!
2106 2106
2107 2107 Here is an example of how to edit a code snippet successive
2108 2108 times. First we call the editor:
2109 2109
2110 2110 In [8]: ed\\
2111 2111 Editing... done. Executing edited code...\\
2112 2112 hello\\
2113 2113 Out[8]: "print 'hello'\\n"
2114 2114
2115 2115 Now we call it again with the previous output (stored in _):
2116 2116
2117 2117 In [9]: ed _\\
2118 2118 Editing... done. Executing edited code...\\
2119 2119 hello world\\
2120 2120 Out[9]: "print 'hello world'\\n"
2121 2121
2122 2122 Now we call it with the output #8 (stored in _8, also as Out[8]):
2123 2123
2124 2124 In [10]: ed _8\\
2125 2125 Editing... done. Executing edited code...\\
2126 2126 hello again\\
2127 2127 Out[10]: "print 'hello again'\\n"
2128 2128
2129 2129
2130 2130 Changing the default editor hook:
2131 2131
2132 2132 If you wish to write your own editor hook, you can put it in a
2133 2133 configuration file which you load at startup time. The default hook
2134 2134 is defined in the IPython.hooks module, and you can use that as a
2135 2135 starting example for further modifications. That file also has
2136 2136 general instructions on how to set a new hook for use once you've
2137 2137 defined it."""
2138 2138
2139 2139 # FIXME: This function has become a convoluted mess. It needs a
2140 2140 # ground-up rewrite with clean, simple logic.
2141 2141
2142 2142 def make_filename(arg):
2143 2143 "Make a filename from the given args"
2144 2144 try:
2145 2145 filename = get_py_filename(arg)
2146 2146 except IOError:
2147 2147 if args.endswith('.py'):
2148 2148 filename = arg
2149 2149 else:
2150 2150 filename = None
2151 2151 return filename
2152 2152
2153 2153 # custom exceptions
2154 2154 class DataIsObject(Exception): pass
2155 2155
2156 2156 opts,args = self.parse_options(parameter_s,'prxn:')
2157 2157 # Set a few locals from the options for convenience:
2158 2158 opts_p = opts.has_key('p')
2159 2159 opts_r = opts.has_key('r')
2160 2160
2161 2161 # Default line number value
2162 2162 lineno = opts.get('n',None)
2163 2163
2164 2164 if opts_p:
2165 2165 args = '_%s' % last_call[0]
2166 2166 if not self.shell.user_ns.has_key(args):
2167 2167 args = last_call[1]
2168 2168
2169 2169 # use last_call to remember the state of the previous call, but don't
2170 2170 # let it be clobbered by successive '-p' calls.
2171 2171 try:
2172 2172 last_call[0] = self.shell.outputcache.prompt_count
2173 2173 if not opts_p:
2174 2174 last_call[1] = parameter_s
2175 2175 except:
2176 2176 pass
2177 2177
2178 2178 # by default this is done with temp files, except when the given
2179 2179 # arg is a filename
2180 2180 use_temp = 1
2181 2181
2182 2182 if re.match(r'\d',args):
2183 2183 # Mode where user specifies ranges of lines, like in %macro.
2184 2184 # This means that you can't edit files whose names begin with
2185 2185 # numbers this way. Tough.
2186 2186 ranges = args.split()
2187 2187 data = ''.join(self.extract_input_slices(ranges,opts_r))
2188 2188 elif args.endswith('.py'):
2189 2189 filename = make_filename(args)
2190 2190 data = ''
2191 2191 use_temp = 0
2192 2192 elif args:
2193 2193 try:
2194 2194 # Load the parameter given as a variable. If not a string,
2195 2195 # process it as an object instead (below)
2196 2196
2197 2197 #print '*** args',args,'type',type(args) # dbg
2198 2198 data = eval(args,self.shell.user_ns)
2199 2199 if not type(data) in StringTypes:
2200 2200 raise DataIsObject
2201 2201
2202 2202 except (NameError,SyntaxError):
2203 2203 # given argument is not a variable, try as a filename
2204 2204 filename = make_filename(args)
2205 2205 if filename is None:
2206 2206 warn("Argument given (%s) can't be found as a variable "
2207 2207 "or as a filename." % args)
2208 2208 return
2209 2209
2210 2210 data = ''
2211 2211 use_temp = 0
2212 2212 except DataIsObject:
2213 2213
2214 2214 # macros have a special edit function
2215 2215 if isinstance(data,Macro):
2216 2216 self._edit_macro(args,data)
2217 2217 return
2218 2218
2219 2219 # For objects, try to edit the file where they are defined
2220 2220 try:
2221 2221 filename = inspect.getabsfile(data)
2222 2222 datafile = 1
2223 2223 except TypeError:
2224 2224 filename = make_filename(args)
2225 2225 datafile = 1
2226 2226 warn('Could not find file where `%s` is defined.\n'
2227 2227 'Opening a file named `%s`' % (args,filename))
2228 2228 # Now, make sure we can actually read the source (if it was in
2229 2229 # a temp file it's gone by now).
2230 2230 if datafile:
2231 2231 try:
2232 2232 if lineno is None:
2233 2233 lineno = inspect.getsourcelines(data)[1]
2234 2234 except IOError:
2235 2235 filename = make_filename(args)
2236 2236 if filename is None:
2237 2237 warn('The file `%s` where `%s` was defined cannot '
2238 2238 'be read.' % (filename,data))
2239 2239 return
2240 2240 use_temp = 0
2241 2241 else:
2242 2242 data = ''
2243 2243
2244 2244 if use_temp:
2245 2245 filename = self.shell.mktempfile(data)
2246 2246 print 'IPython will make a temporary file named:',filename
2247 2247
2248 2248 # do actual editing here
2249 2249 print 'Editing...',
2250 2250 sys.stdout.flush()
2251 2251 self.shell.hooks.editor(filename,lineno)
2252 2252 if opts.has_key('x'): # -x prevents actual execution
2253 2253 print
2254 2254 else:
2255 2255 print 'done. Executing edited code...'
2256 2256 if opts_r:
2257 2257 self.shell.runlines(file_read(filename))
2258 2258 else:
2259 2259 self.shell.safe_execfile(filename,self.shell.user_ns,
2260 2260 self.shell.user_ns)
2261 2261 if use_temp:
2262 2262 try:
2263 2263 return open(filename).read()
2264 2264 except IOError,msg:
2265 2265 if msg.filename == filename:
2266 2266 warn('File not found. Did you forget to save?')
2267 2267 return
2268 2268 else:
2269 2269 self.shell.showtraceback()
2270 2270
2271 2271 def magic_xmode(self,parameter_s = ''):
2272 2272 """Switch modes for the exception handlers.
2273 2273
2274 2274 Valid modes: Plain, Context and Verbose.
2275 2275
2276 2276 If called without arguments, acts as a toggle."""
2277 2277
2278 2278 def xmode_switch_err(name):
2279 2279 warn('Error changing %s exception modes.\n%s' %
2280 2280 (name,sys.exc_info()[1]))
2281 2281
2282 2282 shell = self.shell
2283 2283 new_mode = parameter_s.strip().capitalize()
2284 2284 try:
2285 2285 shell.InteractiveTB.set_mode(mode=new_mode)
2286 2286 print 'Exception reporting mode:',shell.InteractiveTB.mode
2287 2287 except:
2288 2288 xmode_switch_err('user')
2289 2289
2290 2290 # threaded shells use a special handler in sys.excepthook
2291 2291 if shell.isthreaded:
2292 2292 try:
2293 2293 shell.sys_excepthook.set_mode(mode=new_mode)
2294 2294 except:
2295 2295 xmode_switch_err('threaded')
2296 2296
2297 2297 def magic_colors(self,parameter_s = ''):
2298 2298 """Switch color scheme for prompts, info system and exception handlers.
2299 2299
2300 2300 Currently implemented schemes: NoColor, Linux, LightBG.
2301 2301
2302 2302 Color scheme names are not case-sensitive."""
2303 2303
2304 2304 def color_switch_err(name):
2305 2305 warn('Error changing %s color schemes.\n%s' %
2306 2306 (name,sys.exc_info()[1]))
2307 2307
2308 2308
2309 2309 new_scheme = parameter_s.strip()
2310 2310 if not new_scheme:
2311 2311 print 'You must specify a color scheme.'
2312 2312 return
2313 2313 import IPython.rlineimpl as readline
2314 2314 if not readline.have_readline:
2315 2315 msg = """\
2316 2316 Proper color support under MS Windows requires the pyreadline library.
2317 2317 You can find it at:
2318 2318 http://ipython.scipy.org/moin/PyReadline/Intro
2319 2319 Gary's readline needs the ctypes module, from:
2320 2320 http://starship.python.net/crew/theller/ctypes
2321 2321 (Note that ctypes is already part of Python versions 2.5 and newer).
2322 2322
2323 2323 Defaulting color scheme to 'NoColor'"""
2324 2324 new_scheme = 'NoColor'
2325 2325 warn(msg)
2326 2326 # local shortcut
2327 2327 shell = self.shell
2328 2328
2329 2329 # Set prompt colors
2330 2330 try:
2331 2331 shell.outputcache.set_colors(new_scheme)
2332 2332 except:
2333 2333 color_switch_err('prompt')
2334 2334 else:
2335 2335 shell.rc.colors = \
2336 2336 shell.outputcache.color_table.active_scheme_name
2337 2337 # Set exception colors
2338 2338 try:
2339 2339 shell.InteractiveTB.set_colors(scheme = new_scheme)
2340 2340 shell.SyntaxTB.set_colors(scheme = new_scheme)
2341 2341 except:
2342 2342 color_switch_err('exception')
2343 2343
2344 2344 # threaded shells use a verbose traceback in sys.excepthook
2345 2345 if shell.isthreaded:
2346 2346 try:
2347 2347 shell.sys_excepthook.set_colors(scheme=new_scheme)
2348 2348 except:
2349 2349 color_switch_err('system exception handler')
2350 2350
2351 2351 # Set info (for 'object?') colors
2352 2352 if shell.rc.color_info:
2353 2353 try:
2354 2354 shell.inspector.set_active_scheme(new_scheme)
2355 2355 except:
2356 2356 color_switch_err('object inspector')
2357 2357 else:
2358 2358 shell.inspector.set_active_scheme('NoColor')
2359 2359
2360 2360 def magic_color_info(self,parameter_s = ''):
2361 2361 """Toggle color_info.
2362 2362
2363 2363 The color_info configuration parameter controls whether colors are
2364 2364 used for displaying object details (by things like %psource, %pfile or
2365 2365 the '?' system). This function toggles this value with each call.
2366 2366
2367 2367 Note that unless you have a fairly recent pager (less works better
2368 2368 than more) in your system, using colored object information displays
2369 2369 will not work properly. Test it and see."""
2370 2370
2371 2371 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2372 2372 self.magic_colors(self.shell.rc.colors)
2373 2373 print 'Object introspection functions have now coloring:',
2374 2374 print ['OFF','ON'][self.shell.rc.color_info]
2375 2375
2376 2376 def magic_Pprint(self, parameter_s=''):
2377 2377 """Toggle pretty printing on/off."""
2378 2378
2379 2379 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2380 2380 print 'Pretty printing has been turned', \
2381 2381 ['OFF','ON'][self.shell.rc.pprint]
2382 2382
2383 2383 def magic_exit(self, parameter_s=''):
2384 2384 """Exit IPython, confirming if configured to do so.
2385 2385
2386 2386 You can configure whether IPython asks for confirmation upon exit by
2387 2387 setting the confirm_exit flag in the ipythonrc file."""
2388 2388
2389 2389 self.shell.exit()
2390 2390
2391 2391 def magic_quit(self, parameter_s=''):
2392 2392 """Exit IPython, confirming if configured to do so (like %exit)"""
2393 2393
2394 2394 self.shell.exit()
2395 2395
2396 2396 def magic_Exit(self, parameter_s=''):
2397 2397 """Exit IPython without confirmation."""
2398 2398
2399 2399 self.shell.exit_now = True
2400 2400
2401 2401 def magic_Quit(self, parameter_s=''):
2402 2402 """Exit IPython without confirmation (like %Exit)."""
2403 2403
2404 2404 self.shell.exit_now = True
2405 2405
2406 2406 #......................................................................
2407 2407 # Functions to implement unix shell-type things
2408 2408
2409 2409 def magic_alias(self, parameter_s = ''):
2410 2410 """Define an alias for a system command.
2411 2411
2412 2412 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2413 2413
2414 2414 Then, typing 'alias_name params' will execute the system command 'cmd
2415 2415 params' (from your underlying operating system).
2416 2416
2417 2417 Aliases have lower precedence than magic functions and Python normal
2418 2418 variables, so if 'foo' is both a Python variable and an alias, the
2419 2419 alias can not be executed until 'del foo' removes the Python variable.
2420 2420
2421 2421 You can use the %l specifier in an alias definition to represent the
2422 2422 whole line when the alias is called. For example:
2423 2423
2424 2424 In [2]: alias all echo "Input in brackets: <%l>"\\
2425 2425 In [3]: all hello world\\
2426 2426 Input in brackets: <hello world>
2427 2427
2428 2428 You can also define aliases with parameters using %s specifiers (one
2429 2429 per parameter):
2430 2430
2431 2431 In [1]: alias parts echo first %s second %s\\
2432 2432 In [2]: %parts A B\\
2433 2433 first A second B\\
2434 2434 In [3]: %parts A\\
2435 2435 Incorrect number of arguments: 2 expected.\\
2436 2436 parts is an alias to: 'echo first %s second %s'
2437 2437
2438 2438 Note that %l and %s are mutually exclusive. You can only use one or
2439 2439 the other in your aliases.
2440 2440
2441 2441 Aliases expand Python variables just like system calls using ! or !!
2442 2442 do: all expressions prefixed with '$' get expanded. For details of
2443 2443 the semantic rules, see PEP-215:
2444 2444 http://www.python.org/peps/pep-0215.html. This is the library used by
2445 2445 IPython for variable expansion. If you want to access a true shell
2446 2446 variable, an extra $ is necessary to prevent its expansion by IPython:
2447 2447
2448 2448 In [6]: alias show echo\\
2449 2449 In [7]: PATH='A Python string'\\
2450 2450 In [8]: show $PATH\\
2451 2451 A Python string\\
2452 2452 In [9]: show $$PATH\\
2453 2453 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2454 2454
2455 2455 You can use the alias facility to acess all of $PATH. See the %rehash
2456 2456 and %rehashx functions, which automatically create aliases for the
2457 2457 contents of your $PATH.
2458 2458
2459 2459 If called with no parameters, %alias prints the current alias table."""
2460 2460
2461 2461 par = parameter_s.strip()
2462 2462 if not par:
2463 2463 stored = self.db.get('stored_aliases', {} )
2464 2464 atab = self.shell.alias_table
2465 2465 aliases = atab.keys()
2466 2466 aliases.sort()
2467 2467 res = []
2468 2468 showlast = []
2469 2469 for alias in aliases:
2470 2470 tgt = atab[alias][1]
2471 2471 # 'interesting' aliases
2472 2472 if (alias in stored or
2473 2473 alias != os.path.splitext(tgt)[0] or
2474 2474 ' ' in tgt):
2475 2475 showlast.append((alias, tgt))
2476 2476 else:
2477 2477 res.append((alias, tgt ))
2478 2478
2479 2479 # show most interesting aliases last
2480 2480 res.extend(showlast)
2481 2481 print "Total number of aliases:",len(aliases)
2482 2482 return res
2483 2483 try:
2484 2484 alias,cmd = par.split(None,1)
2485 2485 except:
2486 2486 print OInspect.getdoc(self.magic_alias)
2487 2487 else:
2488 2488 nargs = cmd.count('%s')
2489 2489 if nargs>0 and cmd.find('%l')>=0:
2490 2490 error('The %s and %l specifiers are mutually exclusive '
2491 2491 'in alias definitions.')
2492 2492 else: # all looks OK
2493 2493 self.shell.alias_table[alias] = (nargs,cmd)
2494 2494 self.shell.alias_table_validate(verbose=0)
2495 2495 # end magic_alias
2496 2496
2497 2497 def magic_unalias(self, parameter_s = ''):
2498 2498 """Remove an alias"""
2499 2499
2500 2500 aname = parameter_s.strip()
2501 2501 if aname in self.shell.alias_table:
2502 2502 del self.shell.alias_table[aname]
2503 2503 stored = self.db.get('stored_aliases', {} )
2504 2504 if aname in stored:
2505 2505 print "Removing %stored alias",aname
2506 2506 del stored[aname]
2507 2507 self.db['stored_aliases'] = stored
2508 2508
2509 2509 def magic_rehash(self, parameter_s = ''):
2510 2510 """Update the alias table with all entries in $PATH.
2511 2511
2512 2512 This version does no checks on execute permissions or whether the
2513 2513 contents of $PATH are truly files (instead of directories or something
2514 2514 else). For such a safer (but slower) version, use %rehashx."""
2515 2515
2516 2516 # This function (and rehashx) manipulate the alias_table directly
2517 2517 # rather than calling magic_alias, for speed reasons. A rehash on a
2518 2518 # typical Linux box involves several thousand entries, so efficiency
2519 2519 # here is a top concern.
2520 2520
2521 2521 path = filter(os.path.isdir,os.environ.get('PATH','').split(os.pathsep))
2522 2522 alias_table = self.shell.alias_table
2523 2523 for pdir in path:
2524 2524 for ff in os.listdir(pdir):
2525 2525 # each entry in the alias table must be (N,name), where
2526 2526 # N is the number of positional arguments of the alias.
2527 2527 alias_table[ff] = (0,ff)
2528 2528 # Make sure the alias table doesn't contain keywords or builtins
2529 2529 self.shell.alias_table_validate()
2530 2530 # Call again init_auto_alias() so we get 'rm -i' and other modified
2531 2531 # aliases since %rehash will probably clobber them
2532 2532 self.shell.init_auto_alias()
2533 2533
2534 2534 def magic_rehashx(self, parameter_s = ''):
2535 2535 """Update the alias table with all executable files in $PATH.
2536 2536
2537 2537 This version explicitly checks that every entry in $PATH is a file
2538 2538 with execute access (os.X_OK), so it is much slower than %rehash.
2539 2539
2540 2540 Under Windows, it checks executability as a match agains a
2541 2541 '|'-separated string of extensions, stored in the IPython config
2542 2542 variable win_exec_ext. This defaults to 'exe|com|bat'.
2543 2543
2544 2544 This function also resets the root module cache of module completer,
2545 2545 used on slow filesystems.
2546 2546 """
2547 2547
2548 2548
2549 2549 ip = self.api
2550 2550
2551 2551 # for the benefit of module completer in ipy_completers.py
2552 2552 del ip.db['rootmodules']
2553 2553
2554 2554 path = [os.path.abspath(os.path.expanduser(p)) for p in
2555 2555 os.environ.get('PATH','').split(os.pathsep)]
2556 2556 path = filter(os.path.isdir,path)
2557 2557
2558 2558 alias_table = self.shell.alias_table
2559 2559 syscmdlist = []
2560 2560 if os.name == 'posix':
2561 2561 isexec = lambda fname:os.path.isfile(fname) and \
2562 2562 os.access(fname,os.X_OK)
2563 2563 else:
2564 2564
2565 2565 try:
2566 2566 winext = os.environ['pathext'].replace(';','|').replace('.','')
2567 2567 except KeyError:
2568 2568 winext = 'exe|com|bat|py'
2569 2569 if 'py' not in winext:
2570 2570 winext += '|py'
2571 2571 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2572 2572 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2573 2573 savedir = os.getcwd()
2574 2574 try:
2575 2575 # write the whole loop for posix/Windows so we don't have an if in
2576 2576 # the innermost part
2577 2577 if os.name == 'posix':
2578 2578 for pdir in path:
2579 2579 os.chdir(pdir)
2580 2580 for ff in os.listdir(pdir):
2581 2581 if isexec(ff) and ff not in self.shell.no_alias:
2582 2582 # each entry in the alias table must be (N,name),
2583 2583 # where N is the number of positional arguments of the
2584 2584 # alias.
2585 2585 alias_table[ff] = (0,ff)
2586 2586 syscmdlist.append(ff)
2587 2587 else:
2588 2588 for pdir in path:
2589 2589 os.chdir(pdir)
2590 2590 for ff in os.listdir(pdir):
2591 2591 base, ext = os.path.splitext(ff)
2592 2592 if isexec(ff) and base not in self.shell.no_alias:
2593 2593 if ext.lower() == '.exe':
2594 2594 ff = base
2595 alias_table[base] = (0,ff)
2595 alias_table[base.lower()] = (0,ff)
2596 2596 syscmdlist.append(ff)
2597 2597 # Make sure the alias table doesn't contain keywords or builtins
2598 2598 self.shell.alias_table_validate()
2599 2599 # Call again init_auto_alias() so we get 'rm -i' and other
2600 2600 # modified aliases since %rehashx will probably clobber them
2601 2601 self.shell.init_auto_alias()
2602 2602 db = ip.db
2603 2603 db['syscmdlist'] = syscmdlist
2604 2604 finally:
2605 2605 os.chdir(savedir)
2606 2606
2607 2607 def magic_pwd(self, parameter_s = ''):
2608 2608 """Return the current working directory path."""
2609 2609 return os.getcwd()
2610 2610
2611 2611 def magic_cd(self, parameter_s=''):
2612 2612 """Change the current working directory.
2613 2613
2614 2614 This command automatically maintains an internal list of directories
2615 2615 you visit during your IPython session, in the variable _dh. The
2616 2616 command %dhist shows this history nicely formatted. You can also
2617 2617 do 'cd -<tab>' to see directory history conveniently.
2618 2618
2619 2619 Usage:
2620 2620
2621 2621 cd 'dir': changes to directory 'dir'.
2622 2622
2623 2623 cd -: changes to the last visited directory.
2624 2624
2625 2625 cd -<n>: changes to the n-th directory in the directory history.
2626 2626
2627 2627 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2628 2628 (note: cd <bookmark_name> is enough if there is no
2629 2629 directory <bookmark_name>, but a bookmark with the name exists.)
2630 2630 'cd -b <tab>' allows you to tab-complete bookmark names.
2631 2631
2632 2632 Options:
2633 2633
2634 2634 -q: quiet. Do not print the working directory after the cd command is
2635 2635 executed. By default IPython's cd command does print this directory,
2636 2636 since the default prompts do not display path information.
2637 2637
2638 2638 Note that !cd doesn't work for this purpose because the shell where
2639 2639 !command runs is immediately discarded after executing 'command'."""
2640 2640
2641 2641 parameter_s = parameter_s.strip()
2642 2642 #bkms = self.shell.persist.get("bookmarks",{})
2643 2643
2644 2644 numcd = re.match(r'(-)(\d+)$',parameter_s)
2645 2645 # jump in directory history by number
2646 2646 if numcd:
2647 2647 nn = int(numcd.group(2))
2648 2648 try:
2649 2649 ps = self.shell.user_ns['_dh'][nn]
2650 2650 except IndexError:
2651 2651 print 'The requested directory does not exist in history.'
2652 2652 return
2653 2653 else:
2654 2654 opts = {}
2655 2655 else:
2656 2656 #turn all non-space-escaping backslashes to slashes,
2657 2657 # for c:\windows\directory\names\
2658 2658 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2659 2659 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2660 2660 # jump to previous
2661 2661 if ps == '-':
2662 2662 try:
2663 2663 ps = self.shell.user_ns['_dh'][-2]
2664 2664 except IndexError:
2665 2665 print 'No previous directory to change to.'
2666 2666 return
2667 2667 # jump to bookmark if needed
2668 2668 else:
2669 2669 if not os.path.isdir(ps) or opts.has_key('b'):
2670 2670 bkms = self.db.get('bookmarks', {})
2671 2671
2672 2672 if bkms.has_key(ps):
2673 2673 target = bkms[ps]
2674 2674 print '(bookmark:%s) -> %s' % (ps,target)
2675 2675 ps = target
2676 2676 else:
2677 2677 if opts.has_key('b'):
2678 2678 error("Bookmark '%s' not found. "
2679 2679 "Use '%%bookmark -l' to see your bookmarks." % ps)
2680 2680 return
2681 2681
2682 2682 # at this point ps should point to the target dir
2683 2683 if ps:
2684 2684 try:
2685 2685 os.chdir(os.path.expanduser(ps))
2686 2686 if self.shell.rc.term_title:
2687 2687 #print 'set term title:',self.shell.rc.term_title # dbg
2688 2688 ttitle = ("IPy:" + (
2689 2689 os.getcwd() == '/' and '/' or \
2690 2690 os.path.basename(os.getcwd())))
2691 2691 platutils.set_term_title(ttitle)
2692 2692 except OSError:
2693 2693 print sys.exc_info()[1]
2694 2694 else:
2695 2695 self.shell.user_ns['_dh'].append(os.getcwd())
2696 2696 else:
2697 2697 os.chdir(self.shell.home_dir)
2698 2698 if self.shell.rc.term_title:
2699 2699 platutils.set_term_title("IPy:~")
2700 2700 self.shell.user_ns['_dh'].append(os.getcwd())
2701 2701 if not 'q' in opts:
2702 2702 print self.shell.user_ns['_dh'][-1]
2703 2703
2704 2704 def magic_dhist(self, parameter_s=''):
2705 2705 """Print your history of visited directories.
2706 2706
2707 2707 %dhist -> print full history\\
2708 2708 %dhist n -> print last n entries only\\
2709 2709 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2710 2710
2711 2711 This history is automatically maintained by the %cd command, and
2712 2712 always available as the global list variable _dh. You can use %cd -<n>
2713 2713 to go to directory number <n>."""
2714 2714
2715 2715 dh = self.shell.user_ns['_dh']
2716 2716 if parameter_s:
2717 2717 try:
2718 2718 args = map(int,parameter_s.split())
2719 2719 except:
2720 2720 self.arg_err(Magic.magic_dhist)
2721 2721 return
2722 2722 if len(args) == 1:
2723 2723 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2724 2724 elif len(args) == 2:
2725 2725 ini,fin = args
2726 2726 else:
2727 2727 self.arg_err(Magic.magic_dhist)
2728 2728 return
2729 2729 else:
2730 2730 ini,fin = 0,len(dh)
2731 2731 nlprint(dh,
2732 2732 header = 'Directory history (kept in _dh)',
2733 2733 start=ini,stop=fin)
2734 2734
2735 2735 def magic_env(self, parameter_s=''):
2736 2736 """List environment variables."""
2737 2737
2738 2738 return os.environ.data
2739 2739
2740 2740 def magic_pushd(self, parameter_s=''):
2741 2741 """Place the current dir on stack and change directory.
2742 2742
2743 2743 Usage:\\
2744 2744 %pushd ['dirname']
2745 2745
2746 2746 %pushd with no arguments does a %pushd to your home directory.
2747 2747 """
2748 2748 if parameter_s == '': parameter_s = '~'
2749 2749 dir_s = self.shell.dir_stack
2750 2750 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2751 2751 os.path.expanduser(self.shell.dir_stack[0]):
2752 2752 try:
2753 2753 self.magic_cd(parameter_s)
2754 2754 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2755 2755 self.magic_dirs()
2756 2756 except:
2757 2757 print 'Invalid directory'
2758 2758 else:
2759 2759 print 'You are already there!'
2760 2760
2761 2761 def magic_popd(self, parameter_s=''):
2762 2762 """Change to directory popped off the top of the stack.
2763 2763 """
2764 2764 if len (self.shell.dir_stack) > 1:
2765 2765 self.shell.dir_stack.pop(0)
2766 2766 self.magic_cd(self.shell.dir_stack[0])
2767 2767 print self.shell.dir_stack[0]
2768 2768 else:
2769 2769 print "You can't remove the starting directory from the stack:",\
2770 2770 self.shell.dir_stack
2771 2771
2772 2772 def magic_dirs(self, parameter_s=''):
2773 2773 """Return the current directory stack."""
2774 2774
2775 2775 return self.shell.dir_stack[:]
2776 2776
2777 2777 def magic_sc(self, parameter_s=''):
2778 2778 """Shell capture - execute a shell command and capture its output.
2779 2779
2780 2780 DEPRECATED. Suboptimal, retained for backwards compatibility.
2781 2781
2782 2782 You should use the form 'var = !command' instead. Example:
2783 2783
2784 2784 "%sc -l myfiles = ls ~" should now be written as
2785 2785
2786 2786 "myfiles = !ls ~"
2787 2787
2788 2788 myfiles.s, myfiles.l and myfiles.n still apply as documented
2789 2789 below.
2790 2790
2791 2791 --
2792 2792 %sc [options] varname=command
2793 2793
2794 2794 IPython will run the given command using commands.getoutput(), and
2795 2795 will then update the user's interactive namespace with a variable
2796 2796 called varname, containing the value of the call. Your command can
2797 2797 contain shell wildcards, pipes, etc.
2798 2798
2799 2799 The '=' sign in the syntax is mandatory, and the variable name you
2800 2800 supply must follow Python's standard conventions for valid names.
2801 2801
2802 2802 (A special format without variable name exists for internal use)
2803 2803
2804 2804 Options:
2805 2805
2806 2806 -l: list output. Split the output on newlines into a list before
2807 2807 assigning it to the given variable. By default the output is stored
2808 2808 as a single string.
2809 2809
2810 2810 -v: verbose. Print the contents of the variable.
2811 2811
2812 2812 In most cases you should not need to split as a list, because the
2813 2813 returned value is a special type of string which can automatically
2814 2814 provide its contents either as a list (split on newlines) or as a
2815 2815 space-separated string. These are convenient, respectively, either
2816 2816 for sequential processing or to be passed to a shell command.
2817 2817
2818 2818 For example:
2819 2819
2820 2820 # Capture into variable a
2821 2821 In [9]: sc a=ls *py
2822 2822
2823 2823 # a is a string with embedded newlines
2824 2824 In [10]: a
2825 2825 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2826 2826
2827 2827 # which can be seen as a list:
2828 2828 In [11]: a.l
2829 2829 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2830 2830
2831 2831 # or as a whitespace-separated string:
2832 2832 In [12]: a.s
2833 2833 Out[12]: 'setup.py win32_manual_post_install.py'
2834 2834
2835 2835 # a.s is useful to pass as a single command line:
2836 2836 In [13]: !wc -l $a.s
2837 2837 146 setup.py
2838 2838 130 win32_manual_post_install.py
2839 2839 276 total
2840 2840
2841 2841 # while the list form is useful to loop over:
2842 2842 In [14]: for f in a.l:
2843 2843 ....: !wc -l $f
2844 2844 ....:
2845 2845 146 setup.py
2846 2846 130 win32_manual_post_install.py
2847 2847
2848 2848 Similiarly, the lists returned by the -l option are also special, in
2849 2849 the sense that you can equally invoke the .s attribute on them to
2850 2850 automatically get a whitespace-separated string from their contents:
2851 2851
2852 2852 In [1]: sc -l b=ls *py
2853 2853
2854 2854 In [2]: b
2855 2855 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2856 2856
2857 2857 In [3]: b.s
2858 2858 Out[3]: 'setup.py win32_manual_post_install.py'
2859 2859
2860 2860 In summary, both the lists and strings used for ouptut capture have
2861 2861 the following special attributes:
2862 2862
2863 2863 .l (or .list) : value as list.
2864 2864 .n (or .nlstr): value as newline-separated string.
2865 2865 .s (or .spstr): value as space-separated string.
2866 2866 """
2867 2867
2868 2868 opts,args = self.parse_options(parameter_s,'lv')
2869 2869 # Try to get a variable name and command to run
2870 2870 try:
2871 2871 # the variable name must be obtained from the parse_options
2872 2872 # output, which uses shlex.split to strip options out.
2873 2873 var,_ = args.split('=',1)
2874 2874 var = var.strip()
2875 2875 # But the the command has to be extracted from the original input
2876 2876 # parameter_s, not on what parse_options returns, to avoid the
2877 2877 # quote stripping which shlex.split performs on it.
2878 2878 _,cmd = parameter_s.split('=',1)
2879 2879 except ValueError:
2880 2880 var,cmd = '',''
2881 2881 # If all looks ok, proceed
2882 2882 out,err = self.shell.getoutputerror(cmd)
2883 2883 if err:
2884 2884 print >> Term.cerr,err
2885 2885 if opts.has_key('l'):
2886 2886 out = SList(out.split('\n'))
2887 2887 else:
2888 2888 out = LSString(out)
2889 2889 if opts.has_key('v'):
2890 2890 print '%s ==\n%s' % (var,pformat(out))
2891 2891 if var:
2892 2892 self.shell.user_ns.update({var:out})
2893 2893 else:
2894 2894 return out
2895 2895
2896 2896 def magic_sx(self, parameter_s=''):
2897 2897 """Shell execute - run a shell command and capture its output.
2898 2898
2899 2899 %sx command
2900 2900
2901 2901 IPython will run the given command using commands.getoutput(), and
2902 2902 return the result formatted as a list (split on '\\n'). Since the
2903 2903 output is _returned_, it will be stored in ipython's regular output
2904 2904 cache Out[N] and in the '_N' automatic variables.
2905 2905
2906 2906 Notes:
2907 2907
2908 2908 1) If an input line begins with '!!', then %sx is automatically
2909 2909 invoked. That is, while:
2910 2910 !ls
2911 2911 causes ipython to simply issue system('ls'), typing
2912 2912 !!ls
2913 2913 is a shorthand equivalent to:
2914 2914 %sx ls
2915 2915
2916 2916 2) %sx differs from %sc in that %sx automatically splits into a list,
2917 2917 like '%sc -l'. The reason for this is to make it as easy as possible
2918 2918 to process line-oriented shell output via further python commands.
2919 2919 %sc is meant to provide much finer control, but requires more
2920 2920 typing.
2921 2921
2922 2922 3) Just like %sc -l, this is a list with special attributes:
2923 2923
2924 2924 .l (or .list) : value as list.
2925 2925 .n (or .nlstr): value as newline-separated string.
2926 2926 .s (or .spstr): value as whitespace-separated string.
2927 2927
2928 2928 This is very useful when trying to use such lists as arguments to
2929 2929 system commands."""
2930 2930
2931 2931 if parameter_s:
2932 2932 out,err = self.shell.getoutputerror(parameter_s)
2933 2933 if err:
2934 2934 print >> Term.cerr,err
2935 2935 return SList(out.split('\n'))
2936 2936
2937 2937 def magic_bg(self, parameter_s=''):
2938 2938 """Run a job in the background, in a separate thread.
2939 2939
2940 2940 For example,
2941 2941
2942 2942 %bg myfunc(x,y,z=1)
2943 2943
2944 2944 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2945 2945 execution starts, a message will be printed indicating the job
2946 2946 number. If your job number is 5, you can use
2947 2947
2948 2948 myvar = jobs.result(5) or myvar = jobs[5].result
2949 2949
2950 2950 to assign this result to variable 'myvar'.
2951 2951
2952 2952 IPython has a job manager, accessible via the 'jobs' object. You can
2953 2953 type jobs? to get more information about it, and use jobs.<TAB> to see
2954 2954 its attributes. All attributes not starting with an underscore are
2955 2955 meant for public use.
2956 2956
2957 2957 In particular, look at the jobs.new() method, which is used to create
2958 2958 new jobs. This magic %bg function is just a convenience wrapper
2959 2959 around jobs.new(), for expression-based jobs. If you want to create a
2960 2960 new job with an explicit function object and arguments, you must call
2961 2961 jobs.new() directly.
2962 2962
2963 2963 The jobs.new docstring also describes in detail several important
2964 2964 caveats associated with a thread-based model for background job
2965 2965 execution. Type jobs.new? for details.
2966 2966
2967 2967 You can check the status of all jobs with jobs.status().
2968 2968
2969 2969 The jobs variable is set by IPython into the Python builtin namespace.
2970 2970 If you ever declare a variable named 'jobs', you will shadow this
2971 2971 name. You can either delete your global jobs variable to regain
2972 2972 access to the job manager, or make a new name and assign it manually
2973 2973 to the manager (stored in IPython's namespace). For example, to
2974 2974 assign the job manager to the Jobs name, use:
2975 2975
2976 2976 Jobs = __builtins__.jobs"""
2977 2977
2978 2978 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2979 2979
2980 2980
2981 2981 def magic_bookmark(self, parameter_s=''):
2982 2982 """Manage IPython's bookmark system.
2983 2983
2984 2984 %bookmark <name> - set bookmark to current dir
2985 2985 %bookmark <name> <dir> - set bookmark to <dir>
2986 2986 %bookmark -l - list all bookmarks
2987 2987 %bookmark -d <name> - remove bookmark
2988 2988 %bookmark -r - remove all bookmarks
2989 2989
2990 2990 You can later on access a bookmarked folder with:
2991 2991 %cd -b <name>
2992 2992 or simply '%cd <name>' if there is no directory called <name> AND
2993 2993 there is such a bookmark defined.
2994 2994
2995 2995 Your bookmarks persist through IPython sessions, but they are
2996 2996 associated with each profile."""
2997 2997
2998 2998 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2999 2999 if len(args) > 2:
3000 3000 error('You can only give at most two arguments')
3001 3001 return
3002 3002
3003 3003 bkms = self.db.get('bookmarks',{})
3004 3004
3005 3005 if opts.has_key('d'):
3006 3006 try:
3007 3007 todel = args[0]
3008 3008 except IndexError:
3009 3009 error('You must provide a bookmark to delete')
3010 3010 else:
3011 3011 try:
3012 3012 del bkms[todel]
3013 3013 except:
3014 3014 error("Can't delete bookmark '%s'" % todel)
3015 3015 elif opts.has_key('r'):
3016 3016 bkms = {}
3017 3017 elif opts.has_key('l'):
3018 3018 bks = bkms.keys()
3019 3019 bks.sort()
3020 3020 if bks:
3021 3021 size = max(map(len,bks))
3022 3022 else:
3023 3023 size = 0
3024 3024 fmt = '%-'+str(size)+'s -> %s'
3025 3025 print 'Current bookmarks:'
3026 3026 for bk in bks:
3027 3027 print fmt % (bk,bkms[bk])
3028 3028 else:
3029 3029 if not args:
3030 3030 error("You must specify the bookmark name")
3031 3031 elif len(args)==1:
3032 3032 bkms[args[0]] = os.getcwd()
3033 3033 elif len(args)==2:
3034 3034 bkms[args[0]] = args[1]
3035 3035 self.db['bookmarks'] = bkms
3036 3036
3037 3037 def magic_pycat(self, parameter_s=''):
3038 3038 """Show a syntax-highlighted file through a pager.
3039 3039
3040 3040 This magic is similar to the cat utility, but it will assume the file
3041 3041 to be Python source and will show it with syntax highlighting. """
3042 3042
3043 3043 try:
3044 3044 filename = get_py_filename(parameter_s)
3045 3045 cont = file_read(filename)
3046 3046 except IOError:
3047 3047 try:
3048 3048 cont = eval(parameter_s,self.user_ns)
3049 3049 except NameError:
3050 3050 cont = None
3051 3051 if cont is None:
3052 3052 print "Error: no such file or variable"
3053 3053 return
3054 3054
3055 3055 page(self.shell.pycolorize(cont),
3056 3056 screen_lines=self.shell.rc.screen_length)
3057 3057
3058 3058 def magic_cpaste(self, parameter_s=''):
3059 3059 """Allows you to paste & execute a pre-formatted code block from clipboard
3060 3060
3061 3061 You must terminate the block with '--' (two minus-signs) alone on the
3062 3062 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
3063 3063 is the new sentinel for this operation)
3064 3064
3065 3065 The block is dedented prior to execution to enable execution of
3066 3066 method definitions. '>' characters at the beginning of a line is
3067 3067 ignored, to allow pasting directly from e-mails. The executed block
3068 3068 is also assigned to variable named 'pasted_block' for later editing
3069 3069 with '%edit pasted_block'.
3070 3070
3071 3071 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
3072 3072 This assigns the pasted block to variable 'foo' as string, without
3073 3073 dedenting or executing it.
3074 3074
3075 3075 Do not be alarmed by garbled output on Windows (it's a readline bug).
3076 3076 Just press enter and type -- (and press enter again) and the block
3077 3077 will be what was just pasted.
3078 3078
3079 3079 IPython statements (magics, shell escapes) are not supported (yet).
3080 3080 """
3081 3081 opts,args = self.parse_options(parameter_s,'s:',mode='string')
3082 3082 par = args.strip()
3083 3083 sentinel = opts.get('s','--')
3084 3084
3085 3085 from IPython import iplib
3086 3086 lines = []
3087 3087 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3088 3088 while 1:
3089 3089 l = iplib.raw_input_original(':')
3090 3090 if l ==sentinel:
3091 3091 break
3092 3092 lines.append(l.lstrip('>'))
3093 3093 block = "\n".join(lines) + '\n'
3094 3094 #print "block:\n",block
3095 3095 if not par:
3096 3096 b = textwrap.dedent(block)
3097 3097 exec b in self.user_ns
3098 3098 self.user_ns['pasted_block'] = b
3099 3099 else:
3100 3100 self.user_ns[par] = block
3101 3101 print "Block assigned to '%s'" % par
3102 3102
3103 3103 def magic_quickref(self,arg):
3104 3104 """ Show a quick reference sheet """
3105 3105 import IPython.usage
3106 3106 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
3107 3107
3108 3108 page(qr)
3109 3109
3110 3110 def magic_upgrade(self,arg):
3111 3111 """ Upgrade your IPython installation
3112 3112
3113 3113 This will copy the config files that don't yet exist in your
3114 3114 ipython dir from the system config dir. Use this after upgrading
3115 3115 IPython if you don't wish to delete your .ipython dir.
3116 3116
3117 3117 Call with -nolegacy to get rid of ipythonrc* files (recommended for
3118 3118 new users)
3119 3119
3120 3120 """
3121 3121 ip = self.getapi()
3122 3122 ipinstallation = path(IPython.__file__).dirname()
3123 3123 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
3124 3124 src_config = ipinstallation / 'UserConfig'
3125 3125 userdir = path(ip.options.ipythondir)
3126 3126 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3127 3127 print ">",cmd
3128 3128 shell(cmd)
3129 3129 if arg == '-nolegacy':
3130 3130 legacy = userdir.files('ipythonrc*')
3131 3131 print "Nuking legacy files:",legacy
3132 3132
3133 3133 [p.remove() for p in legacy]
3134 3134 suffix = (sys.platform == 'win32' and '.ini' or '')
3135 3135 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3136 3136
3137 3137 # end Magic
@@ -1,189 +1,196 b''
1 1 """Shell mode for IPython.
2 2
3 3 Start ipython in shell mode by invoking "ipython -p sh"
4 4
5 5 (the old version, "ipython -p pysh" still works but this is the more "modern"
6 6 shell mode and is recommended for users who don't care about pysh-mode
7 7 compatibility)
8 8 """
9 9
10 10 from IPython import ipapi
11 11 import os,textwrap
12 12
13 13 # The import below effectively obsoletes your old-style ipythonrc[.ini],
14 14 # so consider yourself warned!
15 15
16 16 import ipy_defaults
17 17
18 18 def main():
19 19 ip = ipapi.get()
20 20 o = ip.options
21 21 # autocall to "full" mode (smart mode is default, I like full mode)
22 22
23 23 o.autocall = 2
24 24
25 25 # Jason Orendorff's path class is handy to have in user namespace
26 26 # if you are doing shell-like stuff
27 27 try:
28 28 ip.ex("from path import path" )
29 29 except ImportError:
30 30 pass
31 31
32 32 # beefed up %env is handy in shell mode
33 33 import envpersist
34 34 import ipy_which
35 35 import ipy_stock_completers
36 36
37 37
38 38 ip.ex('import os')
39 39 ip.ex("def up(): os.chdir('..')")
40 40
41 41 # Nice prompt
42 42
43 43 o.prompt_in1= r'\C_LightBlue[\C_LightCyan\Y2\C_LightBlue]\C_Green|\#> '
44 44 o.prompt_in2= r'\C_Green|\C_LightGreen\D\C_Green> '
45 45 o.prompt_out= '<\#> '
46 46
47 47 from IPython import Release
48 48
49 49 import sys
50 50 # I like my banner minimal.
51 51 o.banner = "Py %s IPy %s\n" % (sys.version.split('\n')[0],Release.version)
52 52
53 53 # make 'd' an alias for ls -F
54 54
55 55 ip.magic('alias d ls -F --color=auto')
56 56
57 57 ip.IP.default_option('cd','-q')
58 58
59 59 # If you only rarely want to execute the things you %edit...
60 60
61 61 #ip.IP.default_option('edit','-x')
62 62
63 63
64 64 o.prompts_pad_left="1"
65 65 # Remove all blank lines in between prompts, like a normal shell.
66 66 o.separate_in="0"
67 67 o.separate_out="0"
68 68 o.separate_out2="0"
69 69
70 70 # now alias all syscommands
71 71
72 72 db = ip.db
73 73
74 74 syscmds = db.get("syscmdlist",[] )
75 75 if not syscmds:
76 76 print textwrap.dedent("""
77 77 System command list not initialized, probably the first run...
78 78 running %rehashx to refresh the command list. Run %rehashx
79 79 again to refresh command list (after installing new software etc.)
80 80 """)
81 81 ip.magic('rehashx')
82 82 syscmds = db.get("syscmdlist")
83
84 # locase aliases on win#2 only
85 if os.name == 'posix':
86 mapper = lambda s:s
87 else:
88 def mapper(s): return s.lower()
89
83 90 for cmd in syscmds:
84 91 #print "al",cmd
85 92 noext, ext = os.path.splitext(cmd)
86 ip.IP.alias_table[noext] = (0,cmd)
93 ip.IP.alias_table[mapper(noext)] = (0,cmd)
87 94 extend_shell_behavior(ip)
88 95
89 96 def extend_shell_behavior(ip):
90 97
91 98 # Instead of making signature a global variable tie it to IPSHELL.
92 99 # In future if it is required to distinguish between different
93 100 # shells we can assign a signature per shell basis
94 101 ip.IP.__sig__ = 0xa005
95 102 # mark the IPSHELL with this signature
96 103 ip.IP.user_ns['__builtins__'].__dict__['__sig__'] = ip.IP.__sig__
97 104
98 105 from IPython.Itpl import ItplNS
99 106 from IPython.genutils import shell
100 107 # utility to expand user variables via Itpl
101 108 # xxx do something sensible with depth?
102 109 ip.IP.var_expand = lambda cmd, lvars=None, depth=2: \
103 110 str(ItplNS(cmd.replace('#','\#'), ip.IP.user_ns, get_locals()))
104 111
105 112 def get_locals():
106 113 """ Substituting a variable through Itpl deep inside the IPSHELL stack
107 114 requires the knowledge of all the variables in scope upto the last
108 115 IPSHELL frame. This routine simply merges all the local variables
109 116 on the IPSHELL stack without worrying about their scope rules
110 117 """
111 118 import sys
112 119 # note lambda expression constitues a function call
113 120 # hence fno should be incremented by one
114 121 getsig = lambda fno: sys._getframe(fno+1).f_globals \
115 122 ['__builtins__'].__dict__['__sig__']
116 123 getlvars = lambda fno: sys._getframe(fno+1).f_locals
117 124 # trackback until we enter the IPSHELL
118 125 frame_no = 1
119 126 sig = ip.IP.__sig__
120 127 fsig = ~sig
121 128 while fsig != sig :
122 129 try:
123 130 fsig = getsig(frame_no)
124 131 except (AttributeError, KeyError):
125 132 frame_no += 1
126 133 except ValueError:
127 134 # stack is depleted
128 135 # call did not originate from IPSHELL
129 136 return {}
130 137 first_frame = frame_no
131 138 # walk further back until we exit from IPSHELL or deplete stack
132 139 try:
133 140 while(sig == getsig(frame_no+1)):
134 141 frame_no += 1
135 142 except (AttributeError, KeyError, ValueError):
136 143 pass
137 144 # merge the locals from top down hence overriding
138 145 # any re-definitions of variables, functions etc.
139 146 lvars = {}
140 147 for fno in range(frame_no, first_frame-1, -1):
141 148 lvars.update(getlvars(fno))
142 149 #print '\n'*5, first_frame, frame_no, '\n', lvars, '\n'*5 #dbg
143 150 return lvars
144 151
145 152 def _runlines(lines):
146 153 """Run a string of one or more lines of source.
147 154
148 155 This method is capable of running a string containing multiple source
149 156 lines, as if they had been entered at the IPython prompt. Since it
150 157 exposes IPython's processing machinery, the given strings can contain
151 158 magic calls (%magic), special shell access (!cmd), etc."""
152 159
153 160 # We must start with a clean buffer, in case this is run from an
154 161 # interactive IPython session (via a magic, for example).
155 162 ip.IP.resetbuffer()
156 163 lines = lines.split('\n')
157 164 more = 0
158 165 command = ''
159 166 for line in lines:
160 167 # skip blank lines so we don't mess up the prompt counter, but do
161 168 # NOT skip even a blank line if we are in a code block (more is
162 169 # true)
163 170 # if command is not empty trim the line
164 171 if command != '' :
165 172 line = line.strip()
166 173 # add the broken line to the command
167 174 if line and line[-1] == '\\' :
168 175 command += line[0:-1] + ' '
169 176 more = True
170 177 continue
171 178 else :
172 179 # add the last (current) line to the command
173 180 command += line
174 181 if command or more:
175 182 more = ip.IP.push(ip.IP.prefilter(command,more))
176 183 command = ''
177 184 # IPython's runsource returns None if there was an error
178 185 # compiling the code. This allows us to stop processing right
179 186 # away, so the user gets the error message at the right place.
180 187 if more is None:
181 188 break
182 189 # final newline in case the input didn't have it, so that the code
183 190 # actually does get executed
184 191 if more:
185 192 ip.IP.push('\n')
186 193
187 194 ip.IP.runlines = _runlines
188 195
189 196 main()
General Comments 0
You need to be logged in to leave comments. Login now