##// END OF EJS Templates
do not require 'PATH' in %rehash/%rehashx. Closes \#155
vivainio -
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -1,3137 +1,3137 b''
1 1 # -*- coding: utf-8 -*-
2 2 """Magic functions for InteractiveShell.
3 3
4 $Id: Magic.py 2308 2007-05-07 08:25:14Z vivainio $"""
4 $Id: Magic.py 2344 2007-05-15 15:09:39Z 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 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
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 os.environ['PATH'].split(os.pathsep)]
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 2595 alias_table[base] = (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,2634 +1,2631 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 IPython -- An enhanced Interactive Python
4 4
5 5 Requires Python 2.3 or newer.
6 6
7 7 This file contains all the classes and helper functions specific to IPython.
8 8
9 $Id: iplib.py 2341 2007-05-15 14:44:30Z vivainio $
9 $Id: iplib.py 2344 2007-05-15 15:09:39Z vivainio $
10 10 """
11 11
12 12 #*****************************************************************************
13 13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
15 15 #
16 16 # Distributed under the terms of the BSD License. The full license is in
17 17 # the file COPYING, distributed as part of this software.
18 18 #
19 19 # Note: this code originally subclassed code.InteractiveConsole from the
20 20 # Python standard library. Over time, all of that class has been copied
21 21 # verbatim here for modifications which could not be accomplished by
22 22 # subclassing. At this point, there are no dependencies at all on the code
23 23 # module anymore (it is not even imported). The Python License (sec. 2)
24 24 # allows for this, but it's always nice to acknowledge credit where credit is
25 25 # due.
26 26 #*****************************************************************************
27 27
28 28 #****************************************************************************
29 29 # Modules and globals
30 30
31 31 from IPython import Release
32 32 __author__ = '%s <%s>\n%s <%s>' % \
33 33 ( Release.authors['Janko'] + Release.authors['Fernando'] )
34 34 __license__ = Release.license
35 35 __version__ = Release.version
36 36
37 37 # Python standard modules
38 38 import __main__
39 39 import __builtin__
40 40 import StringIO
41 41 import bdb
42 42 import cPickle as pickle
43 43 import codeop
44 44 import exceptions
45 45 import glob
46 46 import inspect
47 47 import keyword
48 48 import new
49 49 import os
50 50 import pydoc
51 51 import re
52 52 import shutil
53 53 import string
54 54 import sys
55 55 import tempfile
56 56 import traceback
57 57 import types
58 58 import pickleshare
59 59 from sets import Set
60 60 from pprint import pprint, pformat
61 61
62 62 # IPython's own modules
63 63 import IPython
64 64 from IPython import Debugger,OInspect,PyColorize,ultraTB
65 65 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
66 66 from IPython.FakeModule import FakeModule
67 67 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
68 68 from IPython.Logger import Logger
69 69 from IPython.Magic import Magic
70 70 from IPython.Prompts import CachedOutput
71 71 from IPython.ipstruct import Struct
72 72 from IPython.background_jobs import BackgroundJobManager
73 73 from IPython.usage import cmd_line_usage,interactive_usage
74 74 from IPython.genutils import *
75 75 from IPython.strdispatch import StrDispatch
76 76 import IPython.ipapi
77 77
78 78 # Globals
79 79
80 80 # store the builtin raw_input globally, and use this always, in case user code
81 81 # overwrites it (like wx.py.PyShell does)
82 82 raw_input_original = raw_input
83 83
84 84 # compiled regexps for autoindent management
85 85 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86 86
87 87
88 88 #****************************************************************************
89 89 # Some utility function definitions
90 90
91 91 ini_spaces_re = re.compile(r'^(\s+)')
92 92
93 93 def num_ini_spaces(strng):
94 94 """Return the number of initial spaces in a string"""
95 95
96 96 ini_spaces = ini_spaces_re.match(strng)
97 97 if ini_spaces:
98 98 return ini_spaces.end()
99 99 else:
100 100 return 0
101 101
102 102 def softspace(file, newvalue):
103 103 """Copied from code.py, to remove the dependency"""
104 104
105 105 oldvalue = 0
106 106 try:
107 107 oldvalue = file.softspace
108 108 except AttributeError:
109 109 pass
110 110 try:
111 111 file.softspace = newvalue
112 112 except (AttributeError, TypeError):
113 113 # "attribute-less object" or "read-only attributes"
114 114 pass
115 115 return oldvalue
116 116
117 117
118 118 #****************************************************************************
119 119 # Local use exceptions
120 120 class SpaceInInput(exceptions.Exception): pass
121 121
122 122
123 123 #****************************************************************************
124 124 # Local use classes
125 125 class Bunch: pass
126 126
127 127 class Undefined: pass
128 128
129 129 class Quitter(object):
130 130 """Simple class to handle exit, similar to Python 2.5's.
131 131
132 132 It handles exiting in an ipython-safe manner, which the one in Python 2.5
133 133 doesn't do (obviously, since it doesn't know about ipython)."""
134 134
135 135 def __init__(self,shell,name):
136 136 self.shell = shell
137 137 self.name = name
138 138
139 139 def __repr__(self):
140 140 return 'Type %s() to exit.' % self.name
141 141 __str__ = __repr__
142 142
143 143 def __call__(self):
144 144 self.shell.exit()
145 145
146 146 class InputList(list):
147 147 """Class to store user input.
148 148
149 149 It's basically a list, but slices return a string instead of a list, thus
150 150 allowing things like (assuming 'In' is an instance):
151 151
152 152 exec In[4:7]
153 153
154 154 or
155 155
156 156 exec In[5:9] + In[14] + In[21:25]"""
157 157
158 158 def __getslice__(self,i,j):
159 159 return ''.join(list.__getslice__(self,i,j))
160 160
161 161 class SyntaxTB(ultraTB.ListTB):
162 162 """Extension which holds some state: the last exception value"""
163 163
164 164 def __init__(self,color_scheme = 'NoColor'):
165 165 ultraTB.ListTB.__init__(self,color_scheme)
166 166 self.last_syntax_error = None
167 167
168 168 def __call__(self, etype, value, elist):
169 169 self.last_syntax_error = value
170 170 ultraTB.ListTB.__call__(self,etype,value,elist)
171 171
172 172 def clear_err_state(self):
173 173 """Return the current error state and clear it"""
174 174 e = self.last_syntax_error
175 175 self.last_syntax_error = None
176 176 return e
177 177
178 178 #****************************************************************************
179 179 # Main IPython class
180 180
181 181 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
182 182 # until a full rewrite is made. I've cleaned all cross-class uses of
183 183 # attributes and methods, but too much user code out there relies on the
184 184 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
185 185 #
186 186 # But at least now, all the pieces have been separated and we could, in
187 187 # principle, stop using the mixin. This will ease the transition to the
188 188 # chainsaw branch.
189 189
190 190 # For reference, the following is the list of 'self.foo' uses in the Magic
191 191 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
192 192 # class, to prevent clashes.
193 193
194 194 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
195 195 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
196 196 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
197 197 # 'self.value']
198 198
199 199 class InteractiveShell(object,Magic):
200 200 """An enhanced console for Python."""
201 201
202 202 # class attribute to indicate whether the class supports threads or not.
203 203 # Subclasses with thread support should override this as needed.
204 204 isthreaded = False
205 205
206 206 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
207 207 user_ns = None,user_global_ns=None,banner2='',
208 208 custom_exceptions=((),None),embedded=False):
209 209
210 210 # log system
211 211 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
212 212
213 213 # some minimal strict typechecks. For some core data structures, I
214 214 # want actual basic python types, not just anything that looks like
215 215 # one. This is especially true for namespaces.
216 216 for ns in (user_ns,user_global_ns):
217 217 if ns is not None and type(ns) != types.DictType:
218 218 raise TypeError,'namespace must be a dictionary'
219 219
220 220 # Job manager (for jobs run as background threads)
221 221 self.jobs = BackgroundJobManager()
222 222
223 223 # Store the actual shell's name
224 224 self.name = name
225 225
226 226 # We need to know whether the instance is meant for embedding, since
227 227 # global/local namespaces need to be handled differently in that case
228 228 self.embedded = embedded
229 229
230 230 # command compiler
231 231 self.compile = codeop.CommandCompiler()
232 232
233 233 # User input buffer
234 234 self.buffer = []
235 235
236 236 # Default name given in compilation of code
237 237 self.filename = '<ipython console>'
238 238
239 239 # Install our own quitter instead of the builtins. For python2.3-2.4,
240 240 # this brings in behavior like 2.5, and for 2.5 it's identical.
241 241 __builtin__.exit = Quitter(self,'exit')
242 242 __builtin__.quit = Quitter(self,'quit')
243 243
244 244 # Make an empty namespace, which extension writers can rely on both
245 245 # existing and NEVER being used by ipython itself. This gives them a
246 246 # convenient location for storing additional information and state
247 247 # their extensions may require, without fear of collisions with other
248 248 # ipython names that may develop later.
249 249 self.meta = Struct()
250 250
251 251 # Create the namespace where the user will operate. user_ns is
252 252 # normally the only one used, and it is passed to the exec calls as
253 253 # the locals argument. But we do carry a user_global_ns namespace
254 254 # given as the exec 'globals' argument, This is useful in embedding
255 255 # situations where the ipython shell opens in a context where the
256 256 # distinction between locals and globals is meaningful.
257 257
258 258 # FIXME. For some strange reason, __builtins__ is showing up at user
259 259 # level as a dict instead of a module. This is a manual fix, but I
260 260 # should really track down where the problem is coming from. Alex
261 261 # Schmolck reported this problem first.
262 262
263 263 # A useful post by Alex Martelli on this topic:
264 264 # Re: inconsistent value from __builtins__
265 265 # Von: Alex Martelli <aleaxit@yahoo.com>
266 266 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
267 267 # Gruppen: comp.lang.python
268 268
269 269 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
270 270 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
271 271 # > <type 'dict'>
272 272 # > >>> print type(__builtins__)
273 273 # > <type 'module'>
274 274 # > Is this difference in return value intentional?
275 275
276 276 # Well, it's documented that '__builtins__' can be either a dictionary
277 277 # or a module, and it's been that way for a long time. Whether it's
278 278 # intentional (or sensible), I don't know. In any case, the idea is
279 279 # that if you need to access the built-in namespace directly, you
280 280 # should start with "import __builtin__" (note, no 's') which will
281 281 # definitely give you a module. Yeah, it's somewhat confusing:-(.
282 282
283 283 # These routines return properly built dicts as needed by the rest of
284 284 # the code, and can also be used by extension writers to generate
285 285 # properly initialized namespaces.
286 286 user_ns = IPython.ipapi.make_user_ns(user_ns)
287 287 user_global_ns = IPython.ipapi.make_user_global_ns(user_global_ns)
288 288
289 289 # Assign namespaces
290 290 # This is the namespace where all normal user variables live
291 291 self.user_ns = user_ns
292 292 # Embedded instances require a separate namespace for globals.
293 293 # Normally this one is unused by non-embedded instances.
294 294 self.user_global_ns = user_global_ns
295 295 # A namespace to keep track of internal data structures to prevent
296 296 # them from cluttering user-visible stuff. Will be updated later
297 297 self.internal_ns = {}
298 298
299 299 # Namespace of system aliases. Each entry in the alias
300 300 # table must be a 2-tuple of the form (N,name), where N is the number
301 301 # of positional arguments of the alias.
302 302 self.alias_table = {}
303 303
304 304 # A table holding all the namespaces IPython deals with, so that
305 305 # introspection facilities can search easily.
306 306 self.ns_table = {'user':user_ns,
307 307 'user_global':user_global_ns,
308 308 'alias':self.alias_table,
309 309 'internal':self.internal_ns,
310 310 'builtin':__builtin__.__dict__
311 311 }
312 312
313 313 # The user namespace MUST have a pointer to the shell itself.
314 314 self.user_ns[name] = self
315 315
316 316 # We need to insert into sys.modules something that looks like a
317 317 # module but which accesses the IPython namespace, for shelve and
318 318 # pickle to work interactively. Normally they rely on getting
319 319 # everything out of __main__, but for embedding purposes each IPython
320 320 # instance has its own private namespace, so we can't go shoving
321 321 # everything into __main__.
322 322
323 323 # note, however, that we should only do this for non-embedded
324 324 # ipythons, which really mimic the __main__.__dict__ with their own
325 325 # namespace. Embedded instances, on the other hand, should not do
326 326 # this because they need to manage the user local/global namespaces
327 327 # only, but they live within a 'normal' __main__ (meaning, they
328 328 # shouldn't overtake the execution environment of the script they're
329 329 # embedded in).
330 330
331 331 if not embedded:
332 332 try:
333 333 main_name = self.user_ns['__name__']
334 334 except KeyError:
335 335 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
336 336 else:
337 337 #print "pickle hack in place" # dbg
338 338 #print 'main_name:',main_name # dbg
339 339 sys.modules[main_name] = FakeModule(self.user_ns)
340 340
341 341 # List of input with multi-line handling.
342 342 # Fill its zero entry, user counter starts at 1
343 343 self.input_hist = InputList(['\n'])
344 344 # This one will hold the 'raw' input history, without any
345 345 # pre-processing. This will allow users to retrieve the input just as
346 346 # it was exactly typed in by the user, with %hist -r.
347 347 self.input_hist_raw = InputList(['\n'])
348 348
349 349 # list of visited directories
350 350 try:
351 351 self.dir_hist = [os.getcwd()]
352 352 except IOError, e:
353 353 self.dir_hist = []
354 354
355 355 # dict of output history
356 356 self.output_hist = {}
357 357
358 358 # Get system encoding at startup time. Certain terminals (like Emacs
359 359 # under Win32 have it set to None, and we need to have a known valid
360 360 # encoding to use in the raw_input() method
361 361 self.stdin_encoding = sys.stdin.encoding or 'ascii'
362 362
363 363 # dict of things NOT to alias (keywords, builtins and some magics)
364 364 no_alias = {}
365 365 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
366 366 for key in keyword.kwlist + no_alias_magics:
367 367 no_alias[key] = 1
368 368 no_alias.update(__builtin__.__dict__)
369 369 self.no_alias = no_alias
370 370
371 371 # make global variables for user access to these
372 372 self.user_ns['_ih'] = self.input_hist
373 373 self.user_ns['_oh'] = self.output_hist
374 374 self.user_ns['_dh'] = self.dir_hist
375 375
376 376 # user aliases to input and output histories
377 377 self.user_ns['In'] = self.input_hist
378 378 self.user_ns['Out'] = self.output_hist
379 379
380 380 # Object variable to store code object waiting execution. This is
381 381 # used mainly by the multithreaded shells, but it can come in handy in
382 382 # other situations. No need to use a Queue here, since it's a single
383 383 # item which gets cleared once run.
384 384 self.code_to_run = None
385 385
386 386 # escapes for automatic behavior on the command line
387 387 self.ESC_SHELL = '!'
388 388 self.ESC_HELP = '?'
389 389 self.ESC_MAGIC = '%'
390 390 self.ESC_QUOTE = ','
391 391 self.ESC_QUOTE2 = ';'
392 392 self.ESC_PAREN = '/'
393 393
394 394 # And their associated handlers
395 395 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
396 396 self.ESC_QUOTE : self.handle_auto,
397 397 self.ESC_QUOTE2 : self.handle_auto,
398 398 self.ESC_MAGIC : self.handle_magic,
399 399 self.ESC_HELP : self.handle_help,
400 400 self.ESC_SHELL : self.handle_shell_escape,
401 401 }
402 402
403 403 # class initializations
404 404 Magic.__init__(self,self)
405 405
406 406 # Python source parser/formatter for syntax highlighting
407 407 pyformat = PyColorize.Parser().format
408 408 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
409 409
410 410 # hooks holds pointers used for user-side customizations
411 411 self.hooks = Struct()
412 412
413 413 self.strdispatchers = {}
414 414
415 415 # Set all default hooks, defined in the IPython.hooks module.
416 416 hooks = IPython.hooks
417 417 for hook_name in hooks.__all__:
418 418 # default hooks have priority 100, i.e. low; user hooks should have
419 419 # 0-100 priority
420 420 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
421 421 #print "bound hook",hook_name
422 422
423 423 # Flag to mark unconditional exit
424 424 self.exit_now = False
425 425
426 426 self.usage_min = """\
427 427 An enhanced console for Python.
428 428 Some of its features are:
429 429 - Readline support if the readline library is present.
430 430 - Tab completion in the local namespace.
431 431 - Logging of input, see command-line options.
432 432 - System shell escape via ! , eg !ls.
433 433 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
434 434 - Keeps track of locally defined variables via %who, %whos.
435 435 - Show object information with a ? eg ?x or x? (use ?? for more info).
436 436 """
437 437 if usage: self.usage = usage
438 438 else: self.usage = self.usage_min
439 439
440 440 # Storage
441 441 self.rc = rc # This will hold all configuration information
442 442 self.pager = 'less'
443 443 # temporary files used for various purposes. Deleted at exit.
444 444 self.tempfiles = []
445 445
446 446 # Keep track of readline usage (later set by init_readline)
447 447 self.has_readline = False
448 448
449 449 # template for logfile headers. It gets resolved at runtime by the
450 450 # logstart method.
451 451 self.loghead_tpl = \
452 452 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
453 453 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
454 454 #log# opts = %s
455 455 #log# args = %s
456 456 #log# It is safe to make manual edits below here.
457 457 #log#-----------------------------------------------------------------------
458 458 """
459 459 # for pushd/popd management
460 460 try:
461 461 self.home_dir = get_home_dir()
462 462 except HomeDirError,msg:
463 463 fatal(msg)
464 464
465 465 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
466 466
467 467 # Functions to call the underlying shell.
468 468
469 469 # The first is similar to os.system, but it doesn't return a value,
470 470 # and it allows interpolation of variables in the user's namespace.
471 471 self.system = lambda cmd: \
472 472 shell(self.var_expand(cmd,depth=2),
473 473 header=self.rc.system_header,
474 474 verbose=self.rc.system_verbose)
475 475
476 476 # These are for getoutput and getoutputerror:
477 477 self.getoutput = lambda cmd: \
478 478 getoutput(self.var_expand(cmd,depth=2),
479 479 header=self.rc.system_header,
480 480 verbose=self.rc.system_verbose)
481 481
482 482 self.getoutputerror = lambda cmd: \
483 483 getoutputerror(self.var_expand(cmd,depth=2),
484 484 header=self.rc.system_header,
485 485 verbose=self.rc.system_verbose)
486 486
487 487 # RegExp for splitting line contents into pre-char//first
488 488 # word-method//rest. For clarity, each group in on one line.
489 489
490 490 # WARNING: update the regexp if the above escapes are changed, as they
491 491 # are hardwired in.
492 492
493 493 # Don't get carried away with trying to make the autocalling catch too
494 494 # much: it's better to be conservative rather than to trigger hidden
495 495 # evals() somewhere and end up causing side effects.
496 496 self.line_split = re.compile(r'^(\s*[,;/]?\s*)'
497 497 r'([\?\w\.]+\w*\s*)'
498 498 r'(\(?.*$)')
499 499
500 500 self.shell_line_split = re.compile(r'^(\s*)'
501 501 r'(\S*\s*)'
502 502 r'(\(?.*$)')
503 503
504 504 # A simpler regexp used as a fallback if the above doesn't work. This
505 505 # one is more conservative in how it partitions the input. This code
506 506 # can probably be cleaned up to do everything with just one regexp, but
507 507 # I'm afraid of breaking something; do it once the unit tests are in
508 508 # place.
509 509 self.line_split_fallback = re.compile(r'^(\s*)'
510 510 r'([%\!\?\w\.]*)'
511 511 r'(.*)')
512 512
513 513 # Original re, keep around for a while in case changes break something
514 514 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
515 515 # r'(\s*[\?\w\.]+\w*\s*)'
516 516 # r'(\(?.*$)')
517 517
518 518 # RegExp to identify potential function names
519 519 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
520 520
521 521 # RegExp to exclude strings with this start from autocalling. In
522 522 # particular, all binary operators should be excluded, so that if foo
523 523 # is callable, foo OP bar doesn't become foo(OP bar), which is
524 524 # invalid. The characters '!=()' don't need to be checked for, as the
525 525 # _prefilter routine explicitely does so, to catch direct calls and
526 526 # rebindings of existing names.
527 527
528 528 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
529 529 # it affects the rest of the group in square brackets.
530 530 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
531 531 '|^is |^not |^in |^and |^or ')
532 532
533 533 # try to catch also methods for stuff in lists/tuples/dicts: off
534 534 # (experimental). For this to work, the line_split regexp would need
535 535 # to be modified so it wouldn't break things at '['. That line is
536 536 # nasty enough that I shouldn't change it until I can test it _well_.
537 537 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
538 538
539 539 # keep track of where we started running (mainly for crash post-mortem)
540 540 self.starting_dir = os.getcwd()
541 541
542 542 # Various switches which can be set
543 543 self.CACHELENGTH = 5000 # this is cheap, it's just text
544 544 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
545 545 self.banner2 = banner2
546 546
547 547 # TraceBack handlers:
548 548
549 549 # Syntax error handler.
550 550 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
551 551
552 552 # The interactive one is initialized with an offset, meaning we always
553 553 # want to remove the topmost item in the traceback, which is our own
554 554 # internal code. Valid modes: ['Plain','Context','Verbose']
555 555 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
556 556 color_scheme='NoColor',
557 557 tb_offset = 1)
558 558
559 559 # IPython itself shouldn't crash. This will produce a detailed
560 560 # post-mortem if it does. But we only install the crash handler for
561 561 # non-threaded shells, the threaded ones use a normal verbose reporter
562 562 # and lose the crash handler. This is because exceptions in the main
563 563 # thread (such as in GUI code) propagate directly to sys.excepthook,
564 564 # and there's no point in printing crash dumps for every user exception.
565 565 if self.isthreaded:
566 566 ipCrashHandler = ultraTB.FormattedTB()
567 567 else:
568 568 from IPython import CrashHandler
569 569 ipCrashHandler = CrashHandler.IPythonCrashHandler(self)
570 570 self.set_crash_handler(ipCrashHandler)
571 571
572 572 # and add any custom exception handlers the user may have specified
573 573 self.set_custom_exc(*custom_exceptions)
574 574
575 575 # indentation management
576 576 self.autoindent = False
577 577 self.indent_current_nsp = 0
578 578
579 579 # Make some aliases automatically
580 580 # Prepare list of shell aliases to auto-define
581 581 if os.name == 'posix':
582 582 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
583 583 'mv mv -i','rm rm -i','cp cp -i',
584 584 'cat cat','less less','clear clear',
585 585 # a better ls
586 586 'ls ls -F',
587 587 # long ls
588 588 'll ls -lF')
589 589 # Extra ls aliases with color, which need special treatment on BSD
590 590 # variants
591 591 ls_extra = ( # color ls
592 592 'lc ls -F -o --color',
593 593 # ls normal files only
594 594 'lf ls -F -o --color %l | grep ^-',
595 595 # ls symbolic links
596 596 'lk ls -F -o --color %l | grep ^l',
597 597 # directories or links to directories,
598 598 'ldir ls -F -o --color %l | grep /$',
599 599 # things which are executable
600 600 'lx ls -F -o --color %l | grep ^-..x',
601 601 )
602 602 # The BSDs don't ship GNU ls, so they don't understand the
603 603 # --color switch out of the box
604 604 if 'bsd' in sys.platform:
605 605 ls_extra = ( # ls normal files only
606 606 'lf ls -lF | grep ^-',
607 607 # ls symbolic links
608 608 'lk ls -lF | grep ^l',
609 609 # directories or links to directories,
610 610 'ldir ls -lF | grep /$',
611 611 # things which are executable
612 612 'lx ls -lF | grep ^-..x',
613 613 )
614 614 auto_alias = auto_alias + ls_extra
615 615 elif os.name in ['nt','dos']:
616 616 auto_alias = ('dir dir /on', 'ls dir /on',
617 617 'ddir dir /ad /on', 'ldir dir /ad /on',
618 618 'mkdir mkdir','rmdir rmdir','echo echo',
619 619 'ren ren','cls cls','copy copy')
620 620 else:
621 621 auto_alias = ()
622 622 self.auto_alias = [s.split(None,1) for s in auto_alias]
623 623 # Call the actual (public) initializer
624 624 self.init_auto_alias()
625 625
626 626 # Produce a public API instance
627 627 self.api = IPython.ipapi.IPApi(self)
628 628
629 629 # track which builtins we add, so we can clean up later
630 630 self.builtins_added = {}
631 631 # This method will add the necessary builtins for operation, but
632 632 # tracking what it did via the builtins_added dict.
633 633 self.add_builtins()
634 634
635 635 # end __init__
636 636
637 637 def var_expand(self,cmd,depth=0):
638 638 """Expand python variables in a string.
639 639
640 640 The depth argument indicates how many frames above the caller should
641 641 be walked to look for the local namespace where to expand variables.
642 642
643 643 The global namespace for expansion is always the user's interactive
644 644 namespace.
645 645 """
646 646
647 647 return str(ItplNS(cmd.replace('#','\#'),
648 648 self.user_ns, # globals
649 649 # Skip our own frame in searching for locals:
650 650 sys._getframe(depth+1).f_locals # locals
651 651 ))
652 652
653 653 def pre_config_initialization(self):
654 654 """Pre-configuration init method
655 655
656 656 This is called before the configuration files are processed to
657 657 prepare the services the config files might need.
658 658
659 659 self.rc already has reasonable default values at this point.
660 660 """
661 661 rc = self.rc
662 662 try:
663 663 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
664 664 except exceptions.UnicodeDecodeError:
665 665 print "Your ipythondir can't be decoded to unicode!"
666 666 print "Please set HOME environment variable to something that"
667 667 print r"only has ASCII characters, e.g. c:\home"
668 668 print "Now it is",rc.ipythondir
669 669 sys.exit()
670 670
671 671
672 672 def post_config_initialization(self):
673 673 """Post configuration init method
674 674
675 675 This is called after the configuration files have been processed to
676 676 'finalize' the initialization."""
677 677
678 678 rc = self.rc
679 679
680 680 # Object inspector
681 681 self.inspector = OInspect.Inspector(OInspect.InspectColors,
682 682 PyColorize.ANSICodeColors,
683 683 'NoColor',
684 684 rc.object_info_string_level)
685 685
686 686 # Load readline proper
687 687 if rc.readline:
688 688 self.init_readline()
689 689
690 690 # local shortcut, this is used a LOT
691 691 self.log = self.logger.log
692 692
693 693 # Initialize cache, set in/out prompts and printing system
694 694 self.outputcache = CachedOutput(self,
695 695 rc.cache_size,
696 696 rc.pprint,
697 697 input_sep = rc.separate_in,
698 698 output_sep = rc.separate_out,
699 699 output_sep2 = rc.separate_out2,
700 700 ps1 = rc.prompt_in1,
701 701 ps2 = rc.prompt_in2,
702 702 ps_out = rc.prompt_out,
703 703 pad_left = rc.prompts_pad_left)
704 704
705 705 # user may have over-ridden the default print hook:
706 706 try:
707 707 self.outputcache.__class__.display = self.hooks.display
708 708 except AttributeError:
709 709 pass
710 710
711 711 # I don't like assigning globally to sys, because it means when
712 712 # embedding instances, each embedded instance overrides the previous
713 713 # choice. But sys.displayhook seems to be called internally by exec,
714 714 # so I don't see a way around it. We first save the original and then
715 715 # overwrite it.
716 716 self.sys_displayhook = sys.displayhook
717 717 sys.displayhook = self.outputcache
718 718
719 719 # Set user colors (don't do it in the constructor above so that it
720 720 # doesn't crash if colors option is invalid)
721 721 self.magic_colors(rc.colors)
722 722
723 723 # Set calling of pdb on exceptions
724 724 self.call_pdb = rc.pdb
725 725
726 726 # Load user aliases
727 727 for alias in rc.alias:
728 728 self.magic_alias(alias)
729 729 self.hooks.late_startup_hook()
730 730
731 731 batchrun = False
732 732 for batchfile in [path(arg) for arg in self.rc.args
733 733 if arg.lower().endswith('.ipy')]:
734 734 if not batchfile.isfile():
735 735 print "No such batch file:", batchfile
736 736 continue
737 737 self.api.runlines(batchfile.text())
738 738 batchrun = True
739 739 if batchrun:
740 740 self.exit_now = True
741 741
742 742 def add_builtins(self):
743 743 """Store ipython references into the builtin namespace.
744 744
745 745 Some parts of ipython operate via builtins injected here, which hold a
746 746 reference to IPython itself."""
747 747
748 748 # TODO: deprecate all except _ip; 'jobs' should be installed
749 749 # by an extension and the rest are under _ip, ipalias is redundant
750 750 builtins_new = dict(__IPYTHON__ = self,
751 751 ip_set_hook = self.set_hook,
752 752 jobs = self.jobs,
753 753 ipmagic = wrap_deprecated(self.ipmagic,'_ip.magic()'),
754 754 ipalias = wrap_deprecated(self.ipalias),
755 755 ipsystem = wrap_deprecated(self.ipsystem,'_ip.system()'),
756 756 _ip = self.api
757 757 )
758 758 for biname,bival in builtins_new.items():
759 759 try:
760 760 # store the orignal value so we can restore it
761 761 self.builtins_added[biname] = __builtin__.__dict__[biname]
762 762 except KeyError:
763 763 # or mark that it wasn't defined, and we'll just delete it at
764 764 # cleanup
765 765 self.builtins_added[biname] = Undefined
766 766 __builtin__.__dict__[biname] = bival
767 767
768 768 # Keep in the builtins a flag for when IPython is active. We set it
769 769 # with setdefault so that multiple nested IPythons don't clobber one
770 770 # another. Each will increase its value by one upon being activated,
771 771 # which also gives us a way to determine the nesting level.
772 772 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
773 773
774 774 def clean_builtins(self):
775 775 """Remove any builtins which might have been added by add_builtins, or
776 776 restore overwritten ones to their previous values."""
777 777 for biname,bival in self.builtins_added.items():
778 778 if bival is Undefined:
779 779 del __builtin__.__dict__[biname]
780 780 else:
781 781 __builtin__.__dict__[biname] = bival
782 782 self.builtins_added.clear()
783 783
784 784 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
785 785 """set_hook(name,hook) -> sets an internal IPython hook.
786 786
787 787 IPython exposes some of its internal API as user-modifiable hooks. By
788 788 adding your function to one of these hooks, you can modify IPython's
789 789 behavior to call at runtime your own routines."""
790 790
791 791 # At some point in the future, this should validate the hook before it
792 792 # accepts it. Probably at least check that the hook takes the number
793 793 # of args it's supposed to.
794 794
795 795 f = new.instancemethod(hook,self,self.__class__)
796 796
797 797 # check if the hook is for strdispatcher first
798 798 if str_key is not None:
799 799 sdp = self.strdispatchers.get(name, StrDispatch())
800 800 sdp.add_s(str_key, f, priority )
801 801 self.strdispatchers[name] = sdp
802 802 return
803 803 if re_key is not None:
804 804 sdp = self.strdispatchers.get(name, StrDispatch())
805 805 sdp.add_re(re.compile(re_key), f, priority )
806 806 self.strdispatchers[name] = sdp
807 807 return
808 808
809 809 dp = getattr(self.hooks, name, None)
810 810 if name not in IPython.hooks.__all__:
811 811 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
812 812 if not dp:
813 813 dp = IPython.hooks.CommandChainDispatcher()
814 814
815 815 try:
816 816 dp.add(f,priority)
817 817 except AttributeError:
818 818 # it was not commandchain, plain old func - replace
819 819 dp = f
820 820
821 821 setattr(self.hooks,name, dp)
822 822
823 823
824 824 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
825 825
826 826 def set_crash_handler(self,crashHandler):
827 827 """Set the IPython crash handler.
828 828
829 829 This must be a callable with a signature suitable for use as
830 830 sys.excepthook."""
831 831
832 832 # Install the given crash handler as the Python exception hook
833 833 sys.excepthook = crashHandler
834 834
835 835 # The instance will store a pointer to this, so that runtime code
836 836 # (such as magics) can access it. This is because during the
837 837 # read-eval loop, it gets temporarily overwritten (to deal with GUI
838 838 # frameworks).
839 839 self.sys_excepthook = sys.excepthook
840 840
841 841
842 842 def set_custom_exc(self,exc_tuple,handler):
843 843 """set_custom_exc(exc_tuple,handler)
844 844
845 845 Set a custom exception handler, which will be called if any of the
846 846 exceptions in exc_tuple occur in the mainloop (specifically, in the
847 847 runcode() method.
848 848
849 849 Inputs:
850 850
851 851 - exc_tuple: a *tuple* of valid exceptions to call the defined
852 852 handler for. It is very important that you use a tuple, and NOT A
853 853 LIST here, because of the way Python's except statement works. If
854 854 you only want to trap a single exception, use a singleton tuple:
855 855
856 856 exc_tuple == (MyCustomException,)
857 857
858 858 - handler: this must be defined as a function with the following
859 859 basic interface: def my_handler(self,etype,value,tb).
860 860
861 861 This will be made into an instance method (via new.instancemethod)
862 862 of IPython itself, and it will be called if any of the exceptions
863 863 listed in the exc_tuple are caught. If the handler is None, an
864 864 internal basic one is used, which just prints basic info.
865 865
866 866 WARNING: by putting in your own exception handler into IPython's main
867 867 execution loop, you run a very good chance of nasty crashes. This
868 868 facility should only be used if you really know what you are doing."""
869 869
870 870 assert type(exc_tuple)==type(()) , \
871 871 "The custom exceptions must be given AS A TUPLE."
872 872
873 873 def dummy_handler(self,etype,value,tb):
874 874 print '*** Simple custom exception handler ***'
875 875 print 'Exception type :',etype
876 876 print 'Exception value:',value
877 877 print 'Traceback :',tb
878 878 print 'Source code :','\n'.join(self.buffer)
879 879
880 880 if handler is None: handler = dummy_handler
881 881
882 882 self.CustomTB = new.instancemethod(handler,self,self.__class__)
883 883 self.custom_exceptions = exc_tuple
884 884
885 885 def set_custom_completer(self,completer,pos=0):
886 886 """set_custom_completer(completer,pos=0)
887 887
888 888 Adds a new custom completer function.
889 889
890 890 The position argument (defaults to 0) is the index in the completers
891 891 list where you want the completer to be inserted."""
892 892
893 893 newcomp = new.instancemethod(completer,self.Completer,
894 894 self.Completer.__class__)
895 895 self.Completer.matchers.insert(pos,newcomp)
896 896
897 897 def set_completer(self):
898 898 """reset readline's completer to be our own."""
899 899 self.readline.set_completer(self.Completer.complete)
900 900
901 901 def _get_call_pdb(self):
902 902 return self._call_pdb
903 903
904 904 def _set_call_pdb(self,val):
905 905
906 906 if val not in (0,1,False,True):
907 907 raise ValueError,'new call_pdb value must be boolean'
908 908
909 909 # store value in instance
910 910 self._call_pdb = val
911 911
912 912 # notify the actual exception handlers
913 913 self.InteractiveTB.call_pdb = val
914 914 if self.isthreaded:
915 915 try:
916 916 self.sys_excepthook.call_pdb = val
917 917 except:
918 918 warn('Failed to activate pdb for threaded exception handler')
919 919
920 920 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
921 921 'Control auto-activation of pdb at exceptions')
922 922
923 923
924 924 # These special functions get installed in the builtin namespace, to
925 925 # provide programmatic (pure python) access to magics, aliases and system
926 926 # calls. This is important for logging, user scripting, and more.
927 927
928 928 # We are basically exposing, via normal python functions, the three
929 929 # mechanisms in which ipython offers special call modes (magics for
930 930 # internal control, aliases for direct system access via pre-selected
931 931 # names, and !cmd for calling arbitrary system commands).
932 932
933 933 def ipmagic(self,arg_s):
934 934 """Call a magic function by name.
935 935
936 936 Input: a string containing the name of the magic function to call and any
937 937 additional arguments to be passed to the magic.
938 938
939 939 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
940 940 prompt:
941 941
942 942 In[1]: %name -opt foo bar
943 943
944 944 To call a magic without arguments, simply use ipmagic('name').
945 945
946 946 This provides a proper Python function to call IPython's magics in any
947 947 valid Python code you can type at the interpreter, including loops and
948 948 compound statements. It is added by IPython to the Python builtin
949 949 namespace upon initialization."""
950 950
951 951 args = arg_s.split(' ',1)
952 952 magic_name = args[0]
953 953 magic_name = magic_name.lstrip(self.ESC_MAGIC)
954 954
955 955 try:
956 956 magic_args = args[1]
957 957 except IndexError:
958 958 magic_args = ''
959 959 fn = getattr(self,'magic_'+magic_name,None)
960 960 if fn is None:
961 961 error("Magic function `%s` not found." % magic_name)
962 962 else:
963 963 magic_args = self.var_expand(magic_args,1)
964 964 return fn(magic_args)
965 965
966 966 def ipalias(self,arg_s):
967 967 """Call an alias by name.
968 968
969 969 Input: a string containing the name of the alias to call and any
970 970 additional arguments to be passed to the magic.
971 971
972 972 ipalias('name -opt foo bar') is equivalent to typing at the ipython
973 973 prompt:
974 974
975 975 In[1]: name -opt foo bar
976 976
977 977 To call an alias without arguments, simply use ipalias('name').
978 978
979 979 This provides a proper Python function to call IPython's aliases in any
980 980 valid Python code you can type at the interpreter, including loops and
981 981 compound statements. It is added by IPython to the Python builtin
982 982 namespace upon initialization."""
983 983
984 984 args = arg_s.split(' ',1)
985 985 alias_name = args[0]
986 986 try:
987 987 alias_args = args[1]
988 988 except IndexError:
989 989 alias_args = ''
990 990 if alias_name in self.alias_table:
991 991 self.call_alias(alias_name,alias_args)
992 992 else:
993 993 error("Alias `%s` not found." % alias_name)
994 994
995 995 def ipsystem(self,arg_s):
996 996 """Make a system call, using IPython."""
997 997
998 998 self.system(arg_s)
999 999
1000 1000 def complete(self,text):
1001 1001 """Return a sorted list of all possible completions on text.
1002 1002
1003 1003 Inputs:
1004 1004
1005 1005 - text: a string of text to be completed on.
1006 1006
1007 1007 This is a wrapper around the completion mechanism, similar to what
1008 1008 readline does at the command line when the TAB key is hit. By
1009 1009 exposing it as a method, it can be used by other non-readline
1010 1010 environments (such as GUIs) for text completion.
1011 1011
1012 1012 Simple usage example:
1013 1013
1014 1014 In [1]: x = 'hello'
1015 1015
1016 1016 In [2]: __IP.complete('x.l')
1017 1017 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
1018 1018
1019 1019 complete = self.Completer.complete
1020 1020 state = 0
1021 1021 # use a dict so we get unique keys, since ipyhton's multiple
1022 1022 # completers can return duplicates. When we make 2.4 a requirement,
1023 1023 # start using sets instead, which are faster.
1024 1024 comps = {}
1025 1025 while True:
1026 1026 newcomp = complete(text,state,line_buffer=text)
1027 1027 if newcomp is None:
1028 1028 break
1029 1029 comps[newcomp] = 1
1030 1030 state += 1
1031 1031 outcomps = comps.keys()
1032 1032 outcomps.sort()
1033 1033 return outcomps
1034 1034
1035 1035 def set_completer_frame(self, frame=None):
1036 1036 if frame:
1037 1037 self.Completer.namespace = frame.f_locals
1038 1038 self.Completer.global_namespace = frame.f_globals
1039 1039 else:
1040 1040 self.Completer.namespace = self.user_ns
1041 1041 self.Completer.global_namespace = self.user_global_ns
1042 1042
1043 1043 def init_auto_alias(self):
1044 1044 """Define some aliases automatically.
1045 1045
1046 1046 These are ALL parameter-less aliases"""
1047 1047
1048 1048 for alias,cmd in self.auto_alias:
1049 1049 self.alias_table[alias] = (0,cmd)
1050 1050
1051 1051 def alias_table_validate(self,verbose=0):
1052 1052 """Update information about the alias table.
1053 1053
1054 1054 In particular, make sure no Python keywords/builtins are in it."""
1055 1055
1056 1056 no_alias = self.no_alias
1057 1057 for k in self.alias_table.keys():
1058 1058 if k in no_alias:
1059 1059 del self.alias_table[k]
1060 1060 if verbose:
1061 1061 print ("Deleting alias <%s>, it's a Python "
1062 1062 "keyword or builtin." % k)
1063 1063
1064 1064 def set_autoindent(self,value=None):
1065 1065 """Set the autoindent flag, checking for readline support.
1066 1066
1067 1067 If called with no arguments, it acts as a toggle."""
1068 1068
1069 1069 if not self.has_readline:
1070 1070 if os.name == 'posix':
1071 1071 warn("The auto-indent feature requires the readline library")
1072 1072 self.autoindent = 0
1073 1073 return
1074 1074 if value is None:
1075 1075 self.autoindent = not self.autoindent
1076 1076 else:
1077 1077 self.autoindent = value
1078 1078
1079 1079 def rc_set_toggle(self,rc_field,value=None):
1080 1080 """Set or toggle a field in IPython's rc config. structure.
1081 1081
1082 1082 If called with no arguments, it acts as a toggle.
1083 1083
1084 1084 If called with a non-existent field, the resulting AttributeError
1085 1085 exception will propagate out."""
1086 1086
1087 1087 rc_val = getattr(self.rc,rc_field)
1088 1088 if value is None:
1089 1089 value = not rc_val
1090 1090 setattr(self.rc,rc_field,value)
1091 1091
1092 1092 def user_setup(self,ipythondir,rc_suffix,mode='install'):
1093 1093 """Install the user configuration directory.
1094 1094
1095 1095 Can be called when running for the first time or to upgrade the user's
1096 1096 .ipython/ directory with the mode parameter. Valid modes are 'install'
1097 1097 and 'upgrade'."""
1098 1098
1099 1099 def wait():
1100 1100 try:
1101 1101 raw_input("Please press <RETURN> to start IPython.")
1102 1102 except EOFError:
1103 1103 print >> Term.cout
1104 1104 print '*'*70
1105 1105
1106 1106 cwd = os.getcwd() # remember where we started
1107 1107 glb = glob.glob
1108 1108 print '*'*70
1109 1109 if mode == 'install':
1110 1110 print \
1111 1111 """Welcome to IPython. I will try to create a personal configuration directory
1112 1112 where you can customize many aspects of IPython's functionality in:\n"""
1113 1113 else:
1114 1114 print 'I am going to upgrade your configuration in:'
1115 1115
1116 1116 print ipythondir
1117 1117
1118 1118 rcdirend = os.path.join('IPython','UserConfig')
1119 1119 cfg = lambda d: os.path.join(d,rcdirend)
1120 1120 try:
1121 1121 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1122 1122 except IOError:
1123 1123 warning = """
1124 1124 Installation error. IPython's directory was not found.
1125 1125
1126 1126 Check the following:
1127 1127
1128 1128 The ipython/IPython directory should be in a directory belonging to your
1129 1129 PYTHONPATH environment variable (that is, it should be in a directory
1130 1130 belonging to sys.path). You can copy it explicitly there or just link to it.
1131 1131
1132 1132 IPython will proceed with builtin defaults.
1133 1133 """
1134 1134 warn(warning)
1135 1135 wait()
1136 1136 return
1137 1137
1138 1138 if mode == 'install':
1139 1139 try:
1140 1140 shutil.copytree(rcdir,ipythondir)
1141 1141 os.chdir(ipythondir)
1142 1142 rc_files = glb("ipythonrc*")
1143 1143 for rc_file in rc_files:
1144 1144 os.rename(rc_file,rc_file+rc_suffix)
1145 1145 except:
1146 1146 warning = """
1147 1147
1148 1148 There was a problem with the installation:
1149 1149 %s
1150 1150 Try to correct it or contact the developers if you think it's a bug.
1151 1151 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1152 1152 warn(warning)
1153 1153 wait()
1154 1154 return
1155 1155
1156 1156 elif mode == 'upgrade':
1157 1157 try:
1158 1158 os.chdir(ipythondir)
1159 1159 except:
1160 1160 print """
1161 1161 Can not upgrade: changing to directory %s failed. Details:
1162 1162 %s
1163 1163 """ % (ipythondir,sys.exc_info()[1])
1164 1164 wait()
1165 1165 return
1166 1166 else:
1167 1167 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1168 1168 for new_full_path in sources:
1169 1169 new_filename = os.path.basename(new_full_path)
1170 1170 if new_filename.startswith('ipythonrc'):
1171 1171 new_filename = new_filename + rc_suffix
1172 1172 # The config directory should only contain files, skip any
1173 1173 # directories which may be there (like CVS)
1174 1174 if os.path.isdir(new_full_path):
1175 1175 continue
1176 1176 if os.path.exists(new_filename):
1177 1177 old_file = new_filename+'.old'
1178 1178 if os.path.exists(old_file):
1179 1179 os.remove(old_file)
1180 1180 os.rename(new_filename,old_file)
1181 1181 shutil.copy(new_full_path,new_filename)
1182 1182 else:
1183 1183 raise ValueError,'unrecognized mode for install:',`mode`
1184 1184
1185 1185 # Fix line-endings to those native to each platform in the config
1186 1186 # directory.
1187 1187 try:
1188 1188 os.chdir(ipythondir)
1189 1189 except:
1190 1190 print """
1191 1191 Problem: changing to directory %s failed.
1192 1192 Details:
1193 1193 %s
1194 1194
1195 1195 Some configuration files may have incorrect line endings. This should not
1196 1196 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1197 1197 wait()
1198 1198 else:
1199 1199 for fname in glb('ipythonrc*'):
1200 1200 try:
1201 1201 native_line_ends(fname,backup=0)
1202 1202 except IOError:
1203 1203 pass
1204 1204
1205 1205 if mode == 'install':
1206 1206 print """
1207 1207 Successful installation!
1208 1208
1209 1209 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1210 1210 IPython manual (there are both HTML and PDF versions supplied with the
1211 1211 distribution) to make sure that your system environment is properly configured
1212 1212 to take advantage of IPython's features.
1213 1213
1214 1214 Important note: the configuration system has changed! The old system is
1215 1215 still in place, but its setting may be partly overridden by the settings in
1216 1216 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1217 1217 if some of the new settings bother you.
1218 1218
1219 1219 """
1220 1220 else:
1221 1221 print """
1222 1222 Successful upgrade!
1223 1223
1224 1224 All files in your directory:
1225 1225 %(ipythondir)s
1226 1226 which would have been overwritten by the upgrade were backed up with a .old
1227 1227 extension. If you had made particular customizations in those files you may
1228 1228 want to merge them back into the new files.""" % locals()
1229 1229 wait()
1230 1230 os.chdir(cwd)
1231 1231 # end user_setup()
1232 1232
1233 1233 def atexit_operations(self):
1234 1234 """This will be executed at the time of exit.
1235 1235
1236 1236 Saving of persistent data should be performed here. """
1237 1237
1238 1238 #print '*** IPython exit cleanup ***' # dbg
1239 1239 # input history
1240 1240 self.savehist()
1241 1241
1242 1242 # Cleanup all tempfiles left around
1243 1243 for tfile in self.tempfiles:
1244 1244 try:
1245 1245 os.unlink(tfile)
1246 1246 except OSError:
1247 1247 pass
1248 1248
1249 1249 # save the "persistent data" catch-all dictionary
1250 1250 self.hooks.shutdown_hook()
1251 1251
1252 1252 def savehist(self):
1253 1253 """Save input history to a file (via readline library)."""
1254 1254 try:
1255 1255 self.readline.write_history_file(self.histfile)
1256 1256 except:
1257 1257 print 'Unable to save IPython command history to file: ' + \
1258 1258 `self.histfile`
1259 1259
1260 1260 def reloadhist(self):
1261 1261 """Reload the input history from disk file."""
1262 1262
1263 1263 if self.has_readline:
1264 1264 self.readline.clear_history()
1265 1265 self.readline.read_history_file(self.shell.histfile)
1266 1266
1267 1267 def history_saving_wrapper(self, func):
1268 1268 """ Wrap func for readline history saving
1269 1269
1270 1270 Convert func into callable that saves & restores
1271 1271 history around the call """
1272 1272
1273 1273 if not self.has_readline:
1274 1274 return func
1275 1275
1276 1276 def wrapper():
1277 1277 self.savehist()
1278 1278 try:
1279 1279 func()
1280 1280 finally:
1281 1281 readline.read_history_file(self.histfile)
1282 1282 return wrapper
1283 1283
1284 1284
1285 1285 def pre_readline(self):
1286 1286 """readline hook to be used at the start of each line.
1287 1287
1288 1288 Currently it handles auto-indent only."""
1289 1289
1290 1290 #debugx('self.indent_current_nsp','pre_readline:')
1291 print "prer",self.indent_current_nsp # dbg
1292 print
1293 1291
1294 1292 self.readline.insert_text(self.indent_current_str())
1295 1293
1296 1294 def init_readline(self):
1297 1295 """Command history completion/saving/reloading."""
1298 1296
1299 1297 import IPython.rlineimpl as readline
1300 1298 if not readline.have_readline:
1301 1299 self.has_readline = 0
1302 1300 self.readline = None
1303 1301 # no point in bugging windows users with this every time:
1304 1302 warn('Readline services not available on this platform.')
1305 1303 else:
1306 1304 sys.modules['readline'] = readline
1307 1305 import atexit
1308 1306 from IPython.completer import IPCompleter
1309 1307 self.Completer = IPCompleter(self,
1310 1308 self.user_ns,
1311 1309 self.user_global_ns,
1312 1310 self.rc.readline_omit__names,
1313 1311 self.alias_table)
1314 1312 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1315 1313 self.strdispatchers['complete_command'] = sdisp
1316 1314 self.Completer.custom_completers = sdisp
1317 1315 # Platform-specific configuration
1318 1316 if os.name == 'nt':
1319 1317 self.readline_startup_hook = readline.set_pre_input_hook
1320 1318 else:
1321 1319 self.readline_startup_hook = readline.set_startup_hook
1322 1320
1323 1321 # Load user's initrc file (readline config)
1324 1322 inputrc_name = os.environ.get('INPUTRC')
1325 1323 if inputrc_name is None:
1326 1324 home_dir = get_home_dir()
1327 1325 if home_dir is not None:
1328 1326 inputrc_name = os.path.join(home_dir,'.inputrc')
1329 1327 if os.path.isfile(inputrc_name):
1330 1328 try:
1331 1329 readline.read_init_file(inputrc_name)
1332 1330 except:
1333 1331 warn('Problems reading readline initialization file <%s>'
1334 1332 % inputrc_name)
1335 1333
1336 1334 self.has_readline = 1
1337 1335 self.readline = readline
1338 1336 # save this in sys so embedded copies can restore it properly
1339 1337 sys.ipcompleter = self.Completer.complete
1340 1338 self.set_completer()
1341 1339
1342 1340 # Configure readline according to user's prefs
1343 1341 for rlcommand in self.rc.readline_parse_and_bind:
1344 1342 readline.parse_and_bind(rlcommand)
1345 1343
1346 1344 # remove some chars from the delimiters list
1347 1345 delims = readline.get_completer_delims()
1348 1346 delims = delims.translate(string._idmap,
1349 1347 self.rc.readline_remove_delims)
1350 1348 readline.set_completer_delims(delims)
1351 1349 # otherwise we end up with a monster history after a while:
1352 1350 readline.set_history_length(1000)
1353 1351 try:
1354 1352 #print '*** Reading readline history' # dbg
1355 1353 readline.read_history_file(self.histfile)
1356 1354 except IOError:
1357 1355 pass # It doesn't exist yet.
1358 1356
1359 1357 atexit.register(self.atexit_operations)
1360 1358 del atexit
1361 1359
1362 1360 # Configure auto-indent for all platforms
1363 1361 self.set_autoindent(self.rc.autoindent)
1364 1362
1365 1363 def ask_yes_no(self,prompt,default=True):
1366 1364 if self.rc.quiet:
1367 1365 return True
1368 1366 return ask_yes_no(prompt,default)
1369 1367
1370 1368 def _should_recompile(self,e):
1371 1369 """Utility routine for edit_syntax_error"""
1372 1370
1373 1371 if e.filename in ('<ipython console>','<input>','<string>',
1374 1372 '<console>','<BackgroundJob compilation>',
1375 1373 None):
1376 1374
1377 1375 return False
1378 1376 try:
1379 1377 if (self.rc.autoedit_syntax and
1380 1378 not self.ask_yes_no('Return to editor to correct syntax error? '
1381 1379 '[Y/n] ','y')):
1382 1380 return False
1383 1381 except EOFError:
1384 1382 return False
1385 1383
1386 1384 def int0(x):
1387 1385 try:
1388 1386 return int(x)
1389 1387 except TypeError:
1390 1388 return 0
1391 1389 # always pass integer line and offset values to editor hook
1392 1390 self.hooks.fix_error_editor(e.filename,
1393 1391 int0(e.lineno),int0(e.offset),e.msg)
1394 1392 return True
1395 1393
1396 1394 def edit_syntax_error(self):
1397 1395 """The bottom half of the syntax error handler called in the main loop.
1398 1396
1399 1397 Loop until syntax error is fixed or user cancels.
1400 1398 """
1401 1399
1402 1400 while self.SyntaxTB.last_syntax_error:
1403 1401 # copy and clear last_syntax_error
1404 1402 err = self.SyntaxTB.clear_err_state()
1405 1403 if not self._should_recompile(err):
1406 1404 return
1407 1405 try:
1408 1406 # may set last_syntax_error again if a SyntaxError is raised
1409 1407 self.safe_execfile(err.filename,self.user_ns)
1410 1408 except:
1411 1409 self.showtraceback()
1412 1410 else:
1413 1411 try:
1414 1412 f = file(err.filename)
1415 1413 try:
1416 1414 sys.displayhook(f.read())
1417 1415 finally:
1418 1416 f.close()
1419 1417 except:
1420 1418 self.showtraceback()
1421 1419
1422 1420 def showsyntaxerror(self, filename=None):
1423 1421 """Display the syntax error that just occurred.
1424 1422
1425 1423 This doesn't display a stack trace because there isn't one.
1426 1424
1427 1425 If a filename is given, it is stuffed in the exception instead
1428 1426 of what was there before (because Python's parser always uses
1429 1427 "<string>" when reading from a string).
1430 1428 """
1431 1429 etype, value, last_traceback = sys.exc_info()
1432 1430
1433 1431 # See note about these variables in showtraceback() below
1434 1432 sys.last_type = etype
1435 1433 sys.last_value = value
1436 1434 sys.last_traceback = last_traceback
1437 1435
1438 1436 if filename and etype is SyntaxError:
1439 1437 # Work hard to stuff the correct filename in the exception
1440 1438 try:
1441 1439 msg, (dummy_filename, lineno, offset, line) = value
1442 1440 except:
1443 1441 # Not the format we expect; leave it alone
1444 1442 pass
1445 1443 else:
1446 1444 # Stuff in the right filename
1447 1445 try:
1448 1446 # Assume SyntaxError is a class exception
1449 1447 value = SyntaxError(msg, (filename, lineno, offset, line))
1450 1448 except:
1451 1449 # If that failed, assume SyntaxError is a string
1452 1450 value = msg, (filename, lineno, offset, line)
1453 1451 self.SyntaxTB(etype,value,[])
1454 1452
1455 1453 def debugger(self,force=False):
1456 1454 """Call the pydb/pdb debugger.
1457 1455
1458 1456 Keywords:
1459 1457
1460 1458 - force(False): by default, this routine checks the instance call_pdb
1461 1459 flag and does not actually invoke the debugger if the flag is false.
1462 1460 The 'force' option forces the debugger to activate even if the flag
1463 1461 is false.
1464 1462 """
1465 1463
1466 1464 if not (force or self.call_pdb):
1467 1465 return
1468 1466
1469 1467 if not hasattr(sys,'last_traceback'):
1470 1468 error('No traceback has been produced, nothing to debug.')
1471 1469 return
1472 1470
1473 1471 # use pydb if available
1474 1472 if Debugger.has_pydb:
1475 1473 from pydb import pm
1476 1474 else:
1477 1475 # fallback to our internal debugger
1478 1476 pm = lambda : self.InteractiveTB.debugger(force=True)
1479 1477 self.history_saving_wrapper(pm)()
1480 1478
1481 1479 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1482 1480 """Display the exception that just occurred.
1483 1481
1484 1482 If nothing is known about the exception, this is the method which
1485 1483 should be used throughout the code for presenting user tracebacks,
1486 1484 rather than directly invoking the InteractiveTB object.
1487 1485
1488 1486 A specific showsyntaxerror() also exists, but this method can take
1489 1487 care of calling it if needed, so unless you are explicitly catching a
1490 1488 SyntaxError exception, don't try to analyze the stack manually and
1491 1489 simply call this method."""
1492 1490
1493 1491
1494 1492 # Though this won't be called by syntax errors in the input line,
1495 1493 # there may be SyntaxError cases whith imported code.
1496 1494
1497 1495
1498 1496 if exc_tuple is None:
1499 1497 etype, value, tb = sys.exc_info()
1500 1498 else:
1501 1499 etype, value, tb = exc_tuple
1502 1500
1503 1501 if etype is SyntaxError:
1504 1502 self.showsyntaxerror(filename)
1505 1503 else:
1506 1504 # WARNING: these variables are somewhat deprecated and not
1507 1505 # necessarily safe to use in a threaded environment, but tools
1508 1506 # like pdb depend on their existence, so let's set them. If we
1509 1507 # find problems in the field, we'll need to revisit their use.
1510 1508 sys.last_type = etype
1511 1509 sys.last_value = value
1512 1510 sys.last_traceback = tb
1513 1511
1514 1512 if etype in self.custom_exceptions:
1515 1513 self.CustomTB(etype,value,tb)
1516 1514 else:
1517 1515 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1518 1516 if self.InteractiveTB.call_pdb and self.has_readline:
1519 1517 # pdb mucks up readline, fix it back
1520 1518 self.set_completer()
1521 1519
1522 1520
1523 1521 def mainloop(self,banner=None):
1524 1522 """Creates the local namespace and starts the mainloop.
1525 1523
1526 1524 If an optional banner argument is given, it will override the
1527 1525 internally created default banner."""
1528 1526
1529 1527 if self.rc.c: # Emulate Python's -c option
1530 1528 self.exec_init_cmd()
1531 1529 if banner is None:
1532 1530 if not self.rc.banner:
1533 1531 banner = ''
1534 1532 # banner is string? Use it directly!
1535 1533 elif isinstance(self.rc.banner,basestring):
1536 1534 banner = self.rc.banner
1537 1535 else:
1538 1536 banner = self.BANNER+self.banner2
1539 1537
1540 1538 self.interact(banner)
1541 1539
1542 1540 def exec_init_cmd(self):
1543 1541 """Execute a command given at the command line.
1544 1542
1545 1543 This emulates Python's -c option."""
1546 1544
1547 1545 #sys.argv = ['-c']
1548 1546 self.push(self.rc.c)
1549 1547
1550 1548 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1551 1549 """Embeds IPython into a running python program.
1552 1550
1553 1551 Input:
1554 1552
1555 1553 - header: An optional header message can be specified.
1556 1554
1557 1555 - local_ns, global_ns: working namespaces. If given as None, the
1558 1556 IPython-initialized one is updated with __main__.__dict__, so that
1559 1557 program variables become visible but user-specific configuration
1560 1558 remains possible.
1561 1559
1562 1560 - stack_depth: specifies how many levels in the stack to go to
1563 1561 looking for namespaces (when local_ns and global_ns are None). This
1564 1562 allows an intermediate caller to make sure that this function gets
1565 1563 the namespace from the intended level in the stack. By default (0)
1566 1564 it will get its locals and globals from the immediate caller.
1567 1565
1568 1566 Warning: it's possible to use this in a program which is being run by
1569 1567 IPython itself (via %run), but some funny things will happen (a few
1570 1568 globals get overwritten). In the future this will be cleaned up, as
1571 1569 there is no fundamental reason why it can't work perfectly."""
1572 1570
1573 1571 # Get locals and globals from caller
1574 1572 if local_ns is None or global_ns is None:
1575 1573 call_frame = sys._getframe(stack_depth).f_back
1576 1574
1577 1575 if local_ns is None:
1578 1576 local_ns = call_frame.f_locals
1579 1577 if global_ns is None:
1580 1578 global_ns = call_frame.f_globals
1581 1579
1582 1580 # Update namespaces and fire up interpreter
1583 1581
1584 1582 # The global one is easy, we can just throw it in
1585 1583 self.user_global_ns = global_ns
1586 1584
1587 1585 # but the user/local one is tricky: ipython needs it to store internal
1588 1586 # data, but we also need the locals. We'll copy locals in the user
1589 1587 # one, but will track what got copied so we can delete them at exit.
1590 1588 # This is so that a later embedded call doesn't see locals from a
1591 1589 # previous call (which most likely existed in a separate scope).
1592 1590 local_varnames = local_ns.keys()
1593 1591 self.user_ns.update(local_ns)
1594 1592
1595 1593 # Patch for global embedding to make sure that things don't overwrite
1596 1594 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1597 1595 # FIXME. Test this a bit more carefully (the if.. is new)
1598 1596 if local_ns is None and global_ns is None:
1599 1597 self.user_global_ns.update(__main__.__dict__)
1600 1598
1601 1599 # make sure the tab-completer has the correct frame information, so it
1602 1600 # actually completes using the frame's locals/globals
1603 1601 self.set_completer_frame()
1604 1602
1605 1603 # before activating the interactive mode, we need to make sure that
1606 1604 # all names in the builtin namespace needed by ipython point to
1607 1605 # ourselves, and not to other instances.
1608 1606 self.add_builtins()
1609 1607
1610 1608 self.interact(header)
1611 1609
1612 1610 # now, purge out the user namespace from anything we might have added
1613 1611 # from the caller's local namespace
1614 1612 delvar = self.user_ns.pop
1615 1613 for var in local_varnames:
1616 1614 delvar(var,None)
1617 1615 # and clean builtins we may have overridden
1618 1616 self.clean_builtins()
1619 1617
1620 1618 def interact(self, banner=None):
1621 1619 """Closely emulate the interactive Python console.
1622 1620
1623 1621 The optional banner argument specify the banner to print
1624 1622 before the first interaction; by default it prints a banner
1625 1623 similar to the one printed by the real Python interpreter,
1626 1624 followed by the current class name in parentheses (so as not
1627 1625 to confuse this with the real interpreter -- since it's so
1628 1626 close!).
1629 1627
1630 1628 """
1631 1629
1632 1630 if self.exit_now:
1633 1631 # batch run -> do not interact
1634 1632 return
1635 1633 cprt = 'Type "copyright", "credits" or "license" for more information.'
1636 1634 if banner is None:
1637 1635 self.write("Python %s on %s\n%s\n(%s)\n" %
1638 1636 (sys.version, sys.platform, cprt,
1639 1637 self.__class__.__name__))
1640 1638 else:
1641 1639 self.write(banner)
1642 1640
1643 1641 more = 0
1644 1642
1645 1643 # Mark activity in the builtins
1646 1644 __builtin__.__dict__['__IPYTHON__active'] += 1
1647 1645
1648 1646 # exit_now is set by a call to %Exit or %Quit
1649 1647 while not self.exit_now:
1650 1648 if more:
1651 1649 prompt = self.hooks.generate_prompt(True)
1652 1650 if self.autoindent:
1653 1651 self.readline_startup_hook(self.pre_readline)
1654 1652 else:
1655 1653 prompt = self.hooks.generate_prompt(False)
1656 1654 try:
1657 1655 line = self.raw_input(prompt,more)
1658 1656 if self.exit_now:
1659 1657 # quick exit on sys.std[in|out] close
1660 1658 break
1661 1659 if self.autoindent:
1662 1660 self.readline_startup_hook(None)
1663 1661 except KeyboardInterrupt:
1664 1662 self.write('\nKeyboardInterrupt\n')
1665 1663 self.resetbuffer()
1666 1664 # keep cache in sync with the prompt counter:
1667 1665 self.outputcache.prompt_count -= 1
1668 1666
1669 1667 if self.autoindent:
1670 1668 self.indent_current_nsp = 0
1671 1669 more = 0
1672 1670 except EOFError:
1673 1671 if self.autoindent:
1674 1672 self.readline_startup_hook(None)
1675 1673 self.write('\n')
1676 1674 self.exit()
1677 1675 except bdb.BdbQuit:
1678 1676 warn('The Python debugger has exited with a BdbQuit exception.\n'
1679 1677 'Because of how pdb handles the stack, it is impossible\n'
1680 1678 'for IPython to properly format this particular exception.\n'
1681 1679 'IPython will resume normal operation.')
1682 1680 except:
1683 1681 # exceptions here are VERY RARE, but they can be triggered
1684 1682 # asynchronously by signal handlers, for example.
1685 1683 self.showtraceback()
1686 1684 else:
1687 1685 more = self.push(line)
1688 1686 if (self.SyntaxTB.last_syntax_error and
1689 1687 self.rc.autoedit_syntax):
1690 1688 self.edit_syntax_error()
1691 1689
1692 1690 # We are off again...
1693 1691 __builtin__.__dict__['__IPYTHON__active'] -= 1
1694 1692
1695 1693 def excepthook(self, etype, value, tb):
1696 1694 """One more defense for GUI apps that call sys.excepthook.
1697 1695
1698 1696 GUI frameworks like wxPython trap exceptions and call
1699 1697 sys.excepthook themselves. I guess this is a feature that
1700 1698 enables them to keep running after exceptions that would
1701 1699 otherwise kill their mainloop. This is a bother for IPython
1702 1700 which excepts to catch all of the program exceptions with a try:
1703 1701 except: statement.
1704 1702
1705 1703 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1706 1704 any app directly invokes sys.excepthook, it will look to the user like
1707 1705 IPython crashed. In order to work around this, we can disable the
1708 1706 CrashHandler and replace it with this excepthook instead, which prints a
1709 1707 regular traceback using our InteractiveTB. In this fashion, apps which
1710 1708 call sys.excepthook will generate a regular-looking exception from
1711 1709 IPython, and the CrashHandler will only be triggered by real IPython
1712 1710 crashes.
1713 1711
1714 1712 This hook should be used sparingly, only in places which are not likely
1715 1713 to be true IPython errors.
1716 1714 """
1717 1715 self.showtraceback((etype,value,tb),tb_offset=0)
1718 1716
1719 1717 def expand_aliases(self,fn,rest):
1720 1718 """ Expand multiple levels of aliases:
1721 1719
1722 1720 if:
1723 1721
1724 1722 alias foo bar /tmp
1725 1723 alias baz foo
1726 1724
1727 1725 then:
1728 1726
1729 1727 baz huhhahhei -> bar /tmp huhhahhei
1730 1728
1731 1729 """
1732 1730 line = fn + " " + rest
1733 1731
1734 1732 done = Set()
1735 1733 while 1:
1736 1734 pre,fn,rest = self.split_user_input(line, pattern = self.shell_line_split)
1737 1735 # print "!",fn,"!",rest # dbg
1738 1736 if fn in self.alias_table:
1739 1737 if fn in done:
1740 1738 warn("Cyclic alias definition, repeated '%s'" % fn)
1741 1739 return ""
1742 1740 done.add(fn)
1743 1741
1744 1742 l2 = self.transform_alias(fn,rest)
1745 1743 # dir -> dir
1746 1744 # print "alias",line, "->",l2 #dbg
1747 1745 if l2 == line:
1748 1746 break
1749 1747 # ls -> ls -F should not recurse forever
1750 1748 if l2.split(None,1)[0] == line.split(None,1)[0]:
1751 1749 line = l2
1752 1750 break
1753 1751
1754 1752 line=l2
1755 1753
1756 1754
1757 1755 # print "al expand to",line #dbg
1758 1756 else:
1759 1757 break
1760 1758
1761 1759 return line
1762 1760
1763 1761 def transform_alias(self, alias,rest=''):
1764 1762 """ Transform alias to system command string.
1765 1763 """
1766 1764 nargs,cmd = self.alias_table[alias]
1767 1765 if ' ' in cmd and os.path.isfile(cmd):
1768 1766 cmd = '"%s"' % cmd
1769 1767
1770 1768 # Expand the %l special to be the user's input line
1771 1769 if cmd.find('%l') >= 0:
1772 1770 cmd = cmd.replace('%l',rest)
1773 1771 rest = ''
1774 1772 if nargs==0:
1775 1773 # Simple, argument-less aliases
1776 1774 cmd = '%s %s' % (cmd,rest)
1777 1775 else:
1778 1776 # Handle aliases with positional arguments
1779 1777 args = rest.split(None,nargs)
1780 1778 if len(args)< nargs:
1781 1779 error('Alias <%s> requires %s arguments, %s given.' %
1782 1780 (alias,nargs,len(args)))
1783 1781 return None
1784 1782 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1785 1783 # Now call the macro, evaluating in the user's namespace
1786 1784 #print 'new command: <%r>' % cmd # dbg
1787 1785 return cmd
1788 1786
1789 1787 def call_alias(self,alias,rest=''):
1790 1788 """Call an alias given its name and the rest of the line.
1791 1789
1792 1790 This is only used to provide backwards compatibility for users of
1793 1791 ipalias(), use of which is not recommended for anymore."""
1794 1792
1795 1793 # Now call the macro, evaluating in the user's namespace
1796 1794 cmd = self.transform_alias(alias, rest)
1797 1795 try:
1798 1796 self.system(cmd)
1799 1797 except:
1800 1798 self.showtraceback()
1801 1799
1802 1800 def indent_current_str(self):
1803 1801 """return the current level of indentation as a string"""
1804 1802 return self.indent_current_nsp * ' '
1805 1803
1806 1804 def autoindent_update(self,line):
1807 1805 """Keep track of the indent level."""
1808 1806
1809 1807 #debugx('line')
1810 1808 #debugx('self.indent_current_nsp')
1811 1809 if self.autoindent:
1812 print "ind level", self.indent_current_nsp #dbg
1813 1810 if line:
1814 1811 inisp = num_ini_spaces(line)
1815 1812 if inisp < self.indent_current_nsp:
1816 1813 self.indent_current_nsp = inisp
1817 1814
1818 1815 if line[-1] == ':':
1819 1816 self.indent_current_nsp += 4
1820 1817 elif dedent_re.match(line):
1821 1818 self.indent_current_nsp -= 4
1822 1819 else:
1823 1820 self.indent_current_nsp = 0
1824 1821
1825 1822 def runlines(self,lines):
1826 1823 """Run a string of one or more lines of source.
1827 1824
1828 1825 This method is capable of running a string containing multiple source
1829 1826 lines, as if they had been entered at the IPython prompt. Since it
1830 1827 exposes IPython's processing machinery, the given strings can contain
1831 1828 magic calls (%magic), special shell access (!cmd), etc."""
1832 1829
1833 1830 # We must start with a clean buffer, in case this is run from an
1834 1831 # interactive IPython session (via a magic, for example).
1835 1832 self.resetbuffer()
1836 1833 lines = lines.split('\n')
1837 1834 more = 0
1838 1835 for line in lines:
1839 1836 # skip blank lines so we don't mess up the prompt counter, but do
1840 1837 # NOT skip even a blank line if we are in a code block (more is
1841 1838 # true)
1842 1839 if line or more:
1843 1840 more = self.push(self.prefilter(line,more))
1844 1841 # IPython's runsource returns None if there was an error
1845 1842 # compiling the code. This allows us to stop processing right
1846 1843 # away, so the user gets the error message at the right place.
1847 1844 if more is None:
1848 1845 break
1849 1846 # final newline in case the input didn't have it, so that the code
1850 1847 # actually does get executed
1851 1848 if more:
1852 1849 self.push('\n')
1853 1850
1854 1851 def runsource(self, source, filename='<input>', symbol='single'):
1855 1852 """Compile and run some source in the interpreter.
1856 1853
1857 1854 Arguments are as for compile_command().
1858 1855
1859 1856 One several things can happen:
1860 1857
1861 1858 1) The input is incorrect; compile_command() raised an
1862 1859 exception (SyntaxError or OverflowError). A syntax traceback
1863 1860 will be printed by calling the showsyntaxerror() method.
1864 1861
1865 1862 2) The input is incomplete, and more input is required;
1866 1863 compile_command() returned None. Nothing happens.
1867 1864
1868 1865 3) The input is complete; compile_command() returned a code
1869 1866 object. The code is executed by calling self.runcode() (which
1870 1867 also handles run-time exceptions, except for SystemExit).
1871 1868
1872 1869 The return value is:
1873 1870
1874 1871 - True in case 2
1875 1872
1876 1873 - False in the other cases, unless an exception is raised, where
1877 1874 None is returned instead. This can be used by external callers to
1878 1875 know whether to continue feeding input or not.
1879 1876
1880 1877 The return value can be used to decide whether to use sys.ps1 or
1881 1878 sys.ps2 to prompt the next line."""
1882 1879
1883 1880 # if the source code has leading blanks, add 'if 1:\n' to it
1884 1881 # this allows execution of indented pasted code. It is tempting
1885 1882 # to add '\n' at the end of source to run commands like ' a=1'
1886 1883 # directly, but this fails for more complicated scenarios
1887 1884 if source[:1] in [' ', '\t']:
1888 1885 source = 'if 1:\n%s' % source
1889 1886
1890 1887 try:
1891 1888 code = self.compile(source,filename,symbol)
1892 1889 except (OverflowError, SyntaxError, ValueError):
1893 1890 # Case 1
1894 1891 self.showsyntaxerror(filename)
1895 1892 return None
1896 1893
1897 1894 if code is None:
1898 1895 # Case 2
1899 1896 return True
1900 1897
1901 1898 # Case 3
1902 1899 # We store the code object so that threaded shells and
1903 1900 # custom exception handlers can access all this info if needed.
1904 1901 # The source corresponding to this can be obtained from the
1905 1902 # buffer attribute as '\n'.join(self.buffer).
1906 1903 self.code_to_run = code
1907 1904 # now actually execute the code object
1908 1905 if self.runcode(code) == 0:
1909 1906 return False
1910 1907 else:
1911 1908 return None
1912 1909
1913 1910 def runcode(self,code_obj):
1914 1911 """Execute a code object.
1915 1912
1916 1913 When an exception occurs, self.showtraceback() is called to display a
1917 1914 traceback.
1918 1915
1919 1916 Return value: a flag indicating whether the code to be run completed
1920 1917 successfully:
1921 1918
1922 1919 - 0: successful execution.
1923 1920 - 1: an error occurred.
1924 1921 """
1925 1922
1926 1923 # Set our own excepthook in case the user code tries to call it
1927 1924 # directly, so that the IPython crash handler doesn't get triggered
1928 1925 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1929 1926
1930 1927 # we save the original sys.excepthook in the instance, in case config
1931 1928 # code (such as magics) needs access to it.
1932 1929 self.sys_excepthook = old_excepthook
1933 1930 outflag = 1 # happens in more places, so it's easier as default
1934 1931 try:
1935 1932 try:
1936 1933 # Embedded instances require separate global/local namespaces
1937 1934 # so they can see both the surrounding (local) namespace and
1938 1935 # the module-level globals when called inside another function.
1939 1936 if self.embedded:
1940 1937 exec code_obj in self.user_global_ns, self.user_ns
1941 1938 # Normal (non-embedded) instances should only have a single
1942 1939 # namespace for user code execution, otherwise functions won't
1943 1940 # see interactive top-level globals.
1944 1941 else:
1945 1942 exec code_obj in self.user_ns
1946 1943 finally:
1947 1944 # Reset our crash handler in place
1948 1945 sys.excepthook = old_excepthook
1949 1946 except SystemExit:
1950 1947 self.resetbuffer()
1951 1948 self.showtraceback()
1952 1949 warn("Type %exit or %quit to exit IPython "
1953 1950 "(%Exit or %Quit do so unconditionally).",level=1)
1954 1951 except self.custom_exceptions:
1955 1952 etype,value,tb = sys.exc_info()
1956 1953 self.CustomTB(etype,value,tb)
1957 1954 except:
1958 1955 self.showtraceback()
1959 1956 else:
1960 1957 outflag = 0
1961 1958 if softspace(sys.stdout, 0):
1962 1959 print
1963 1960 # Flush out code object which has been run (and source)
1964 1961 self.code_to_run = None
1965 1962 return outflag
1966 1963
1967 1964 def push(self, line):
1968 1965 """Push a line to the interpreter.
1969 1966
1970 1967 The line should not have a trailing newline; it may have
1971 1968 internal newlines. The line is appended to a buffer and the
1972 1969 interpreter's runsource() method is called with the
1973 1970 concatenated contents of the buffer as source. If this
1974 1971 indicates that the command was executed or invalid, the buffer
1975 1972 is reset; otherwise, the command is incomplete, and the buffer
1976 1973 is left as it was after the line was appended. The return
1977 1974 value is 1 if more input is required, 0 if the line was dealt
1978 1975 with in some way (this is the same as runsource()).
1979 1976 """
1980 1977
1981 1978 # autoindent management should be done here, and not in the
1982 1979 # interactive loop, since that one is only seen by keyboard input. We
1983 1980 # need this done correctly even for code run via runlines (which uses
1984 1981 # push).
1985 1982
1986 1983 #print 'push line: <%s>' % line # dbg
1987 1984 for subline in line.splitlines():
1988 1985 self.autoindent_update(subline)
1989 1986 self.buffer.append(line)
1990 1987 more = self.runsource('\n'.join(self.buffer), self.filename)
1991 1988 if not more:
1992 1989 self.resetbuffer()
1993 1990 return more
1994 1991
1995 1992 def resetbuffer(self):
1996 1993 """Reset the input buffer."""
1997 1994 self.buffer[:] = []
1998 1995
1999 1996 def raw_input(self,prompt='',continue_prompt=False):
2000 1997 """Write a prompt and read a line.
2001 1998
2002 1999 The returned line does not include the trailing newline.
2003 2000 When the user enters the EOF key sequence, EOFError is raised.
2004 2001
2005 2002 Optional inputs:
2006 2003
2007 2004 - prompt(''): a string to be printed to prompt the user.
2008 2005
2009 2006 - continue_prompt(False): whether this line is the first one or a
2010 2007 continuation in a sequence of inputs.
2011 2008 """
2012 2009
2013 2010 # Code run by the user may have modified the readline completer state.
2014 2011 # We must ensure that our completer is back in place.
2015 2012 if self.has_readline:
2016 2013 self.set_completer()
2017 2014
2018 2015 try:
2019 2016 line = raw_input_original(prompt).decode(self.stdin_encoding)
2020 2017 except ValueError:
2021 2018 warn("\n********\nYou or a %run:ed script called sys.stdin.close()"
2022 2019 " or sys.stdout.close()!\nExiting IPython!")
2023 2020 self.exit_now = True
2024 2021 return ""
2025 2022
2026 2023 # Try to be reasonably smart about not re-indenting pasted input more
2027 2024 # than necessary. We do this by trimming out the auto-indent initial
2028 2025 # spaces, if the user's actual input started itself with whitespace.
2029 2026 #debugx('self.buffer[-1]')
2030 2027
2031 2028 if self.autoindent:
2032 2029 if num_ini_spaces(line) > self.indent_current_nsp:
2033 2030 line = line[self.indent_current_nsp:]
2034 2031 self.indent_current_nsp = 0
2035 2032
2036 2033 # store the unfiltered input before the user has any chance to modify
2037 2034 # it.
2038 2035 if line.strip():
2039 2036 if continue_prompt:
2040 2037 self.input_hist_raw[-1] += '%s\n' % line
2041 2038 if self.has_readline: # and some config option is set?
2042 2039 try:
2043 2040 histlen = self.readline.get_current_history_length()
2044 2041 newhist = self.input_hist_raw[-1].rstrip()
2045 2042 self.readline.remove_history_item(histlen-1)
2046 2043 self.readline.replace_history_item(histlen-2,newhist)
2047 2044 except AttributeError:
2048 2045 pass # re{move,place}_history_item are new in 2.4.
2049 2046 else:
2050 2047 self.input_hist_raw.append('%s\n' % line)
2051 2048
2052 2049 try:
2053 2050 lineout = self.prefilter(line,continue_prompt)
2054 2051 except:
2055 2052 # blanket except, in case a user-defined prefilter crashes, so it
2056 2053 # can't take all of ipython with it.
2057 2054 self.showtraceback()
2058 2055 return ''
2059 2056 else:
2060 2057 return lineout
2061 2058
2062 2059 def split_user_input(self,line, pattern = None):
2063 2060 """Split user input into pre-char, function part and rest."""
2064 2061
2065 2062 if pattern is None:
2066 2063 pattern = self.line_split
2067 2064
2068 2065 lsplit = pattern.match(line)
2069 2066 if lsplit is None: # no regexp match returns None
2070 2067 #print "match failed for line '%s'" % line # dbg
2071 2068 try:
2072 2069 iFun,theRest = line.split(None,1)
2073 2070 except ValueError:
2074 2071 #print "split failed for line '%s'" % line # dbg
2075 2072 iFun,theRest = line,''
2076 2073 pre = re.match('^(\s*)(.*)',line).groups()[0]
2077 2074 else:
2078 2075 pre,iFun,theRest = lsplit.groups()
2079 2076
2080 2077 # iFun has to be a valid python identifier, so it better be only pure
2081 2078 #ascii, no unicode:
2082 2079 try:
2083 2080 iFun = iFun.encode('ascii')
2084 2081 except UnicodeEncodeError:
2085 2082 theRest = iFun+u' '+theRest
2086 2083 iFun = u''
2087 2084
2088 2085 #print 'line:<%s>' % line # dbg
2089 2086 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
2090 2087 return pre,iFun.strip(),theRest
2091 2088
2092 2089 # THIS VERSION IS BROKEN!!! It was intended to prevent spurious attribute
2093 2090 # accesses with a more stringent check of inputs, but it introduced other
2094 2091 # bugs. Disable it for now until I can properly fix it.
2095 2092 def split_user_inputBROKEN(self,line):
2096 2093 """Split user input into pre-char, function part and rest."""
2097 2094
2098 2095 lsplit = self.line_split.match(line)
2099 2096 if lsplit is None: # no regexp match returns None
2100 2097 lsplit = self.line_split_fallback.match(line)
2101 2098
2102 2099 #pre,iFun,theRest = lsplit.groups() # dbg
2103 2100 #print 'line:<%s>' % line # dbg
2104 2101 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
2105 2102 #return pre,iFun.strip(),theRest # dbg
2106 2103
2107 2104 return lsplit.groups()
2108 2105
2109 2106 def _prefilter(self, line, continue_prompt):
2110 2107 """Calls different preprocessors, depending on the form of line."""
2111 2108
2112 2109 # All handlers *must* return a value, even if it's blank ('').
2113 2110
2114 2111 # Lines are NOT logged here. Handlers should process the line as
2115 2112 # needed, update the cache AND log it (so that the input cache array
2116 2113 # stays synced).
2117 2114
2118 2115 # This function is _very_ delicate, and since it's also the one which
2119 2116 # determines IPython's response to user input, it must be as efficient
2120 2117 # as possible. For this reason it has _many_ returns in it, trying
2121 2118 # always to exit as quickly as it can figure out what it needs to do.
2122 2119
2123 2120 # This function is the main responsible for maintaining IPython's
2124 2121 # behavior respectful of Python's semantics. So be _very_ careful if
2125 2122 # making changes to anything here.
2126 2123
2127 2124 #.....................................................................
2128 2125 # Code begins
2129 2126
2130 2127 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
2131 2128
2132 2129 # save the line away in case we crash, so the post-mortem handler can
2133 2130 # record it
2134 2131 self._last_input_line = line
2135 2132
2136 2133 #print '***line: <%s>' % line # dbg
2137 2134
2138 2135 # the input history needs to track even empty lines
2139 2136 stripped = line.strip()
2140 2137
2141 2138 if not stripped:
2142 2139 if not continue_prompt:
2143 2140 self.outputcache.prompt_count -= 1
2144 2141 return self.handle_normal(line,continue_prompt)
2145 2142 #return self.handle_normal('',continue_prompt)
2146 2143
2147 2144 # print '***cont',continue_prompt # dbg
2148 2145 # special handlers are only allowed for single line statements
2149 2146 if continue_prompt and not self.rc.multi_line_specials:
2150 2147 return self.handle_normal(line,continue_prompt)
2151 2148
2152 2149
2153 2150 # For the rest, we need the structure of the input
2154 2151 pre,iFun,theRest = self.split_user_input(line)
2155 2152
2156 2153 # See whether any pre-existing handler can take care of it
2157 2154
2158 2155 rewritten = self.hooks.input_prefilter(stripped)
2159 2156 if rewritten != stripped: # ok, some prefilter did something
2160 2157 rewritten = pre + rewritten # add indentation
2161 2158 return self.handle_normal(rewritten)
2162 2159
2163 2160 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2164 2161
2165 2162 # Next, check if we can automatically execute this thing
2166 2163
2167 2164 # Allow ! in multi-line statements if multi_line_specials is on:
2168 2165 if continue_prompt and self.rc.multi_line_specials and \
2169 2166 iFun.startswith(self.ESC_SHELL):
2170 2167 return self.handle_shell_escape(line,continue_prompt,
2171 2168 pre=pre,iFun=iFun,
2172 2169 theRest=theRest)
2173 2170
2174 2171 # First check for explicit escapes in the last/first character
2175 2172 handler = None
2176 2173 if line[-1] == self.ESC_HELP and line[0] != self.ESC_SHELL:
2177 2174 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
2178 2175 if handler is None:
2179 2176 # look at the first character of iFun, NOT of line, so we skip
2180 2177 # leading whitespace in multiline input
2181 2178 handler = self.esc_handlers.get(iFun[0:1])
2182 2179 if handler is not None:
2183 2180 return handler(line,continue_prompt,pre,iFun,theRest)
2184 2181 # Emacs ipython-mode tags certain input lines
2185 2182 if line.endswith('# PYTHON-MODE'):
2186 2183 return self.handle_emacs(line,continue_prompt)
2187 2184
2188 2185 # Let's try to find if the input line is a magic fn
2189 2186 oinfo = None
2190 2187 if hasattr(self,'magic_'+iFun):
2191 2188 # WARNING: _ofind uses getattr(), so it can consume generators and
2192 2189 # cause other side effects.
2193 2190 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2194 2191 if oinfo['ismagic']:
2195 2192 # Be careful not to call magics when a variable assignment is
2196 2193 # being made (ls='hi', for example)
2197 2194 if self.rc.automagic and \
2198 2195 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
2199 2196 (self.rc.multi_line_specials or not continue_prompt):
2200 2197 return self.handle_magic(line,continue_prompt,
2201 2198 pre,iFun,theRest)
2202 2199 else:
2203 2200 return self.handle_normal(line,continue_prompt)
2204 2201
2205 2202 # If the rest of the line begins with an (in)equality, assginment or
2206 2203 # function call, we should not call _ofind but simply execute it.
2207 2204 # This avoids spurious geattr() accesses on objects upon assignment.
2208 2205 #
2209 2206 # It also allows users to assign to either alias or magic names true
2210 2207 # python variables (the magic/alias systems always take second seat to
2211 2208 # true python code).
2212 2209 if theRest and theRest[0] in '!=()':
2213 2210 return self.handle_normal(line,continue_prompt)
2214 2211
2215 2212 if oinfo is None:
2216 2213 # let's try to ensure that _oinfo is ONLY called when autocall is
2217 2214 # on. Since it has inevitable potential side effects, at least
2218 2215 # having autocall off should be a guarantee to the user that no
2219 2216 # weird things will happen.
2220 2217
2221 2218 if self.rc.autocall:
2222 2219 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2223 2220 else:
2224 2221 # in this case, all that's left is either an alias or
2225 2222 # processing the line normally.
2226 2223 if iFun in self.alias_table:
2227 2224 # if autocall is off, by not running _ofind we won't know
2228 2225 # whether the given name may also exist in one of the
2229 2226 # user's namespace. At this point, it's best to do a
2230 2227 # quick check just to be sure that we don't let aliases
2231 2228 # shadow variables.
2232 2229 head = iFun.split('.',1)[0]
2233 2230 if head in self.user_ns or head in self.internal_ns \
2234 2231 or head in __builtin__.__dict__:
2235 2232 return self.handle_normal(line,continue_prompt)
2236 2233 else:
2237 2234 return self.handle_alias(line,continue_prompt,
2238 2235 pre,iFun,theRest)
2239 2236
2240 2237 else:
2241 2238 return self.handle_normal(line,continue_prompt)
2242 2239
2243 2240 if not oinfo['found']:
2244 2241 return self.handle_normal(line,continue_prompt)
2245 2242 else:
2246 2243 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2247 2244 if oinfo['isalias']:
2248 2245 return self.handle_alias(line,continue_prompt,
2249 2246 pre,iFun,theRest)
2250 2247
2251 2248 if (self.rc.autocall
2252 2249 and
2253 2250 (
2254 2251 #only consider exclusion re if not "," or ";" autoquoting
2255 2252 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
2256 2253 or pre == self.ESC_PAREN) or
2257 2254 (not self.re_exclude_auto.match(theRest)))
2258 2255 and
2259 2256 self.re_fun_name.match(iFun) and
2260 2257 callable(oinfo['obj'])) :
2261 2258 #print 'going auto' # dbg
2262 2259 return self.handle_auto(line,continue_prompt,
2263 2260 pre,iFun,theRest,oinfo['obj'])
2264 2261 else:
2265 2262 #print 'was callable?', callable(oinfo['obj']) # dbg
2266 2263 return self.handle_normal(line,continue_prompt)
2267 2264
2268 2265 # If we get here, we have a normal Python line. Log and return.
2269 2266 return self.handle_normal(line,continue_prompt)
2270 2267
2271 2268 def _prefilter_dumb(self, line, continue_prompt):
2272 2269 """simple prefilter function, for debugging"""
2273 2270 return self.handle_normal(line,continue_prompt)
2274 2271
2275 2272
2276 2273 def multiline_prefilter(self, line, continue_prompt):
2277 2274 """ Run _prefilter for each line of input
2278 2275
2279 2276 Covers cases where there are multiple lines in the user entry,
2280 2277 which is the case when the user goes back to a multiline history
2281 2278 entry and presses enter.
2282 2279
2283 2280 """
2284 2281 out = []
2285 2282 for l in line.rstrip('\n').split('\n'):
2286 2283 out.append(self._prefilter(l, continue_prompt))
2287 2284 return '\n'.join(out)
2288 2285
2289 2286 # Set the default prefilter() function (this can be user-overridden)
2290 2287 prefilter = multiline_prefilter
2291 2288
2292 2289 def handle_normal(self,line,continue_prompt=None,
2293 2290 pre=None,iFun=None,theRest=None):
2294 2291 """Handle normal input lines. Use as a template for handlers."""
2295 2292
2296 2293 # With autoindent on, we need some way to exit the input loop, and I
2297 2294 # don't want to force the user to have to backspace all the way to
2298 2295 # clear the line. The rule will be in this case, that either two
2299 2296 # lines of pure whitespace in a row, or a line of pure whitespace but
2300 2297 # of a size different to the indent level, will exit the input loop.
2301 2298
2302 2299 if (continue_prompt and self.autoindent and line.isspace() and
2303 2300 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2304 2301 (self.buffer[-1]).isspace() )):
2305 2302 line = ''
2306 2303
2307 2304 self.log(line,line,continue_prompt)
2308 2305 return line
2309 2306
2310 2307 def handle_alias(self,line,continue_prompt=None,
2311 2308 pre=None,iFun=None,theRest=None):
2312 2309 """Handle alias input lines. """
2313 2310
2314 2311 # pre is needed, because it carries the leading whitespace. Otherwise
2315 2312 # aliases won't work in indented sections.
2316 2313 transformed = self.expand_aliases(iFun, theRest)
2317 2314 line_out = '%s_ip.system(%s)' % (pre, make_quoted_expr( transformed ))
2318 2315 self.log(line,line_out,continue_prompt)
2319 2316 #print 'line out:',line_out # dbg
2320 2317 return line_out
2321 2318
2322 2319 def handle_shell_escape(self, line, continue_prompt=None,
2323 2320 pre=None,iFun=None,theRest=None):
2324 2321 """Execute the line in a shell, empty return value"""
2325 2322
2326 2323 #print 'line in :', `line` # dbg
2327 2324 # Example of a special handler. Others follow a similar pattern.
2328 2325 if line.lstrip().startswith('!!'):
2329 2326 # rewrite iFun/theRest to properly hold the call to %sx and
2330 2327 # the actual command to be executed, so handle_magic can work
2331 2328 # correctly
2332 2329 theRest = '%s %s' % (iFun[2:],theRest)
2333 2330 iFun = 'sx'
2334 2331 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2335 2332 line.lstrip()[2:]),
2336 2333 continue_prompt,pre,iFun,theRest)
2337 2334 else:
2338 2335 cmd=line.lstrip().lstrip('!')
2339 2336 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2340 2337 # update cache/log and return
2341 2338 self.log(line,line_out,continue_prompt)
2342 2339 return line_out
2343 2340
2344 2341 def handle_magic(self, line, continue_prompt=None,
2345 2342 pre=None,iFun=None,theRest=None):
2346 2343 """Execute magic functions."""
2347 2344
2348 2345
2349 2346 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2350 2347 self.log(line,cmd,continue_prompt)
2351 2348 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2352 2349 return cmd
2353 2350
2354 2351 def handle_auto(self, line, continue_prompt=None,
2355 2352 pre=None,iFun=None,theRest=None,obj=None):
2356 2353 """Hande lines which can be auto-executed, quoting if requested."""
2357 2354
2358 2355 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2359 2356
2360 2357 # This should only be active for single-line input!
2361 2358 if continue_prompt:
2362 2359 self.log(line,line,continue_prompt)
2363 2360 return line
2364 2361
2365 2362 auto_rewrite = True
2366 2363
2367 2364 if pre == self.ESC_QUOTE:
2368 2365 # Auto-quote splitting on whitespace
2369 2366 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2370 2367 elif pre == self.ESC_QUOTE2:
2371 2368 # Auto-quote whole string
2372 2369 newcmd = '%s("%s")' % (iFun,theRest)
2373 2370 elif pre == self.ESC_PAREN:
2374 2371 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2375 2372 else:
2376 2373 # Auto-paren.
2377 2374 # We only apply it to argument-less calls if the autocall
2378 2375 # parameter is set to 2. We only need to check that autocall is <
2379 2376 # 2, since this function isn't called unless it's at least 1.
2380 2377 if not theRest and (self.rc.autocall < 2):
2381 2378 newcmd = '%s %s' % (iFun,theRest)
2382 2379 auto_rewrite = False
2383 2380 else:
2384 2381 if theRest.startswith('['):
2385 2382 if hasattr(obj,'__getitem__'):
2386 2383 # Don't autocall in this case: item access for an object
2387 2384 # which is BOTH callable and implements __getitem__.
2388 2385 newcmd = '%s %s' % (iFun,theRest)
2389 2386 auto_rewrite = False
2390 2387 else:
2391 2388 # if the object doesn't support [] access, go ahead and
2392 2389 # autocall
2393 2390 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2394 2391 elif theRest.endswith(';'):
2395 2392 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2396 2393 else:
2397 2394 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2398 2395
2399 2396 if auto_rewrite:
2400 2397 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2401 2398 # log what is now valid Python, not the actual user input (without the
2402 2399 # final newline)
2403 2400 self.log(line,newcmd,continue_prompt)
2404 2401 return newcmd
2405 2402
2406 2403 def handle_help(self, line, continue_prompt=None,
2407 2404 pre=None,iFun=None,theRest=None):
2408 2405 """Try to get some help for the object.
2409 2406
2410 2407 obj? or ?obj -> basic information.
2411 2408 obj?? or ??obj -> more details.
2412 2409 """
2413 2410
2414 2411 # We need to make sure that we don't process lines which would be
2415 2412 # otherwise valid python, such as "x=1 # what?"
2416 2413 try:
2417 2414 codeop.compile_command(line)
2418 2415 except SyntaxError:
2419 2416 # We should only handle as help stuff which is NOT valid syntax
2420 2417 if line[0]==self.ESC_HELP:
2421 2418 line = line[1:]
2422 2419 elif line[-1]==self.ESC_HELP:
2423 2420 line = line[:-1]
2424 2421 self.log(line,'#?'+line,continue_prompt)
2425 2422 if line:
2426 2423 #print 'line:<%r>' % line # dbg
2427 2424 self.magic_pinfo(line)
2428 2425 else:
2429 2426 page(self.usage,screen_lines=self.rc.screen_length)
2430 2427 return '' # Empty string is needed here!
2431 2428 except:
2432 2429 # Pass any other exceptions through to the normal handler
2433 2430 return self.handle_normal(line,continue_prompt)
2434 2431 else:
2435 2432 # If the code compiles ok, we should handle it normally
2436 2433 return self.handle_normal(line,continue_prompt)
2437 2434
2438 2435 def getapi(self):
2439 2436 """ Get an IPApi object for this shell instance
2440 2437
2441 2438 Getting an IPApi object is always preferable to accessing the shell
2442 2439 directly, but this holds true especially for extensions.
2443 2440
2444 2441 It should always be possible to implement an extension with IPApi
2445 2442 alone. If not, contact maintainer to request an addition.
2446 2443
2447 2444 """
2448 2445 return self.api
2449 2446
2450 2447 def handle_emacs(self,line,continue_prompt=None,
2451 2448 pre=None,iFun=None,theRest=None):
2452 2449 """Handle input lines marked by python-mode."""
2453 2450
2454 2451 # Currently, nothing is done. Later more functionality can be added
2455 2452 # here if needed.
2456 2453
2457 2454 # The input cache shouldn't be updated
2458 2455
2459 2456 return line
2460 2457
2461 2458 def mktempfile(self,data=None):
2462 2459 """Make a new tempfile and return its filename.
2463 2460
2464 2461 This makes a call to tempfile.mktemp, but it registers the created
2465 2462 filename internally so ipython cleans it up at exit time.
2466 2463
2467 2464 Optional inputs:
2468 2465
2469 2466 - data(None): if data is given, it gets written out to the temp file
2470 2467 immediately, and the file is closed again."""
2471 2468
2472 2469 filename = tempfile.mktemp('.py','ipython_edit_')
2473 2470 self.tempfiles.append(filename)
2474 2471
2475 2472 if data:
2476 2473 tmp_file = open(filename,'w')
2477 2474 tmp_file.write(data)
2478 2475 tmp_file.close()
2479 2476 return filename
2480 2477
2481 2478 def write(self,data):
2482 2479 """Write a string to the default output"""
2483 2480 Term.cout.write(data)
2484 2481
2485 2482 def write_err(self,data):
2486 2483 """Write a string to the default error output"""
2487 2484 Term.cerr.write(data)
2488 2485
2489 2486 def exit(self):
2490 2487 """Handle interactive exit.
2491 2488
2492 2489 This method sets the exit_now attribute."""
2493 2490
2494 2491 if self.rc.confirm_exit:
2495 2492 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2496 2493 self.exit_now = True
2497 2494 else:
2498 2495 self.exit_now = True
2499 2496
2500 2497 def safe_execfile(self,fname,*where,**kw):
2501 2498 """A safe version of the builtin execfile().
2502 2499
2503 2500 This version will never throw an exception, and knows how to handle
2504 2501 ipython logs as well."""
2505 2502
2506 2503 def syspath_cleanup():
2507 2504 """Internal cleanup routine for sys.path."""
2508 2505 if add_dname:
2509 2506 try:
2510 2507 sys.path.remove(dname)
2511 2508 except ValueError:
2512 2509 # For some reason the user has already removed it, ignore.
2513 2510 pass
2514 2511
2515 2512 fname = os.path.expanduser(fname)
2516 2513
2517 2514 # Find things also in current directory. This is needed to mimic the
2518 2515 # behavior of running a script from the system command line, where
2519 2516 # Python inserts the script's directory into sys.path
2520 2517 dname = os.path.dirname(os.path.abspath(fname))
2521 2518 add_dname = False
2522 2519 if dname not in sys.path:
2523 2520 sys.path.insert(0,dname)
2524 2521 add_dname = True
2525 2522
2526 2523 try:
2527 2524 xfile = open(fname)
2528 2525 except:
2529 2526 print >> Term.cerr, \
2530 2527 'Could not open file <%s> for safe execution.' % fname
2531 2528 syspath_cleanup()
2532 2529 return None
2533 2530
2534 2531 kw.setdefault('islog',0)
2535 2532 kw.setdefault('quiet',1)
2536 2533 kw.setdefault('exit_ignore',0)
2537 2534 first = xfile.readline()
2538 2535 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2539 2536 xfile.close()
2540 2537 # line by line execution
2541 2538 if first.startswith(loghead) or kw['islog']:
2542 2539 print 'Loading log file <%s> one line at a time...' % fname
2543 2540 if kw['quiet']:
2544 2541 stdout_save = sys.stdout
2545 2542 sys.stdout = StringIO.StringIO()
2546 2543 try:
2547 2544 globs,locs = where[0:2]
2548 2545 except:
2549 2546 try:
2550 2547 globs = locs = where[0]
2551 2548 except:
2552 2549 globs = locs = globals()
2553 2550 badblocks = []
2554 2551
2555 2552 # we also need to identify indented blocks of code when replaying
2556 2553 # logs and put them together before passing them to an exec
2557 2554 # statement. This takes a bit of regexp and look-ahead work in the
2558 2555 # file. It's easiest if we swallow the whole thing in memory
2559 2556 # first, and manually walk through the lines list moving the
2560 2557 # counter ourselves.
2561 2558 indent_re = re.compile('\s+\S')
2562 2559 xfile = open(fname)
2563 2560 filelines = xfile.readlines()
2564 2561 xfile.close()
2565 2562 nlines = len(filelines)
2566 2563 lnum = 0
2567 2564 while lnum < nlines:
2568 2565 line = filelines[lnum]
2569 2566 lnum += 1
2570 2567 # don't re-insert logger status info into cache
2571 2568 if line.startswith('#log#'):
2572 2569 continue
2573 2570 else:
2574 2571 # build a block of code (maybe a single line) for execution
2575 2572 block = line
2576 2573 try:
2577 2574 next = filelines[lnum] # lnum has already incremented
2578 2575 except:
2579 2576 next = None
2580 2577 while next and indent_re.match(next):
2581 2578 block += next
2582 2579 lnum += 1
2583 2580 try:
2584 2581 next = filelines[lnum]
2585 2582 except:
2586 2583 next = None
2587 2584 # now execute the block of one or more lines
2588 2585 try:
2589 2586 exec block in globs,locs
2590 2587 except SystemExit:
2591 2588 pass
2592 2589 except:
2593 2590 badblocks.append(block.rstrip())
2594 2591 if kw['quiet']: # restore stdout
2595 2592 sys.stdout.close()
2596 2593 sys.stdout = stdout_save
2597 2594 print 'Finished replaying log file <%s>' % fname
2598 2595 if badblocks:
2599 2596 print >> sys.stderr, ('\nThe following lines/blocks in file '
2600 2597 '<%s> reported errors:' % fname)
2601 2598
2602 2599 for badline in badblocks:
2603 2600 print >> sys.stderr, badline
2604 2601 else: # regular file execution
2605 2602 try:
2606 2603 if sys.platform == 'win32' and sys.version_info < (2,5,1):
2607 2604 # Work around a bug in Python for Windows. The bug was
2608 2605 # fixed in in Python 2.5 r54159 and 54158, but that's still
2609 2606 # SVN Python as of March/07. For details, see:
2610 2607 # http://projects.scipy.org/ipython/ipython/ticket/123
2611 2608 try:
2612 2609 globs,locs = where[0:2]
2613 2610 except:
2614 2611 try:
2615 2612 globs = locs = where[0]
2616 2613 except:
2617 2614 globs = locs = globals()
2618 2615 exec file(fname) in globs,locs
2619 2616 else:
2620 2617 execfile(fname,*where)
2621 2618 except SyntaxError:
2622 2619 self.showsyntaxerror()
2623 2620 warn('Failure executing file: <%s>' % fname)
2624 2621 except SystemExit,status:
2625 2622 if not kw['exit_ignore']:
2626 2623 self.showtraceback()
2627 2624 warn('Failure executing file: <%s>' % fname)
2628 2625 except:
2629 2626 self.showtraceback()
2630 2627 warn('Failure executing file: <%s>' % fname)
2631 2628
2632 2629 syspath_cleanup()
2633 2630
2634 2631 #************************* end of file <iplib.py> *****************************
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now