##// END OF EJS Templates
fix default value in interactiveshell.ask_yes_no...
MinRK -
Show More
@@ -1,2710 +1,2710 b''
1 1 # -*- coding: utf-8 -*-
2 2 """Main IPython class."""
3 3
4 4 #-----------------------------------------------------------------------------
5 5 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de>
6 6 # Copyright (C) 2001-2007 Fernando Perez. <fperez@colorado.edu>
7 7 # Copyright (C) 2008-2011 The IPython Development Team
8 8 #
9 9 # Distributed under the terms of the BSD License. The full license is in
10 10 # the file COPYING, distributed as part of this software.
11 11 #-----------------------------------------------------------------------------
12 12
13 13 #-----------------------------------------------------------------------------
14 14 # Imports
15 15 #-----------------------------------------------------------------------------
16 16
17 17 from __future__ import with_statement
18 18 from __future__ import absolute_import
19 19
20 20 import __builtin__ as builtin_mod
21 21 import __future__
22 22 import abc
23 23 import ast
24 24 import atexit
25 25 import codeop
26 26 import inspect
27 27 import os
28 28 import re
29 29 import sys
30 30 import tempfile
31 31 import types
32 32 try:
33 33 from contextlib import nested
34 34 except:
35 35 from IPython.utils.nested_context import nested
36 36
37 37 from IPython.config.configurable import SingletonConfigurable
38 38 from IPython.core import debugger, oinspect
39 39 from IPython.core import history as ipcorehist
40 40 from IPython.core import page
41 41 from IPython.core import prefilter
42 42 from IPython.core import shadowns
43 43 from IPython.core import ultratb
44 44 from IPython.core.alias import AliasManager, AliasError
45 45 from IPython.core.autocall import ExitAutocall
46 46 from IPython.core.builtin_trap import BuiltinTrap
47 47 from IPython.core.compilerop import CachingCompiler
48 48 from IPython.core.display_trap import DisplayTrap
49 49 from IPython.core.displayhook import DisplayHook
50 50 from IPython.core.displaypub import DisplayPublisher
51 51 from IPython.core.error import TryNext, UsageError
52 52 from IPython.core.extensions import ExtensionManager
53 53 from IPython.core.fakemodule import FakeModule, init_fakemod_dict
54 54 from IPython.core.formatters import DisplayFormatter
55 55 from IPython.core.history import HistoryManager
56 56 from IPython.core.inputsplitter import IPythonInputSplitter
57 57 from IPython.core.logger import Logger
58 58 from IPython.core.macro import Macro
59 59 from IPython.core.magic import Magic
60 60 from IPython.core.payload import PayloadManager
61 61 from IPython.core.plugin import PluginManager
62 62 from IPython.core.prefilter import PrefilterManager, ESC_MAGIC
63 63 from IPython.core.profiledir import ProfileDir
64 64 from IPython.external.Itpl import ItplNS
65 65 from IPython.utils import PyColorize
66 66 from IPython.utils import io
67 67 from IPython.utils import py3compat
68 68 from IPython.utils.doctestreload import doctest_reload
69 69 from IPython.utils.io import ask_yes_no, rprint
70 70 from IPython.utils.ipstruct import Struct
71 71 from IPython.utils.path import get_home_dir, get_ipython_dir, HomeDirError
72 72 from IPython.utils.pickleshare import PickleShareDB
73 73 from IPython.utils.process import system, getoutput
74 74 from IPython.utils.strdispatch import StrDispatch
75 75 from IPython.utils.syspathcontext import prepended_to_syspath
76 76 from IPython.utils.text import (num_ini_spaces, format_screen, LSString, SList,
77 77 DollarFormatter)
78 78 from IPython.utils.traitlets import (Integer, CBool, CaselessStrEnum, Enum,
79 79 List, Unicode, Instance, Type)
80 80 from IPython.utils.warn import warn, error, fatal
81 81 import IPython.core.hooks
82 82
83 83 #-----------------------------------------------------------------------------
84 84 # Globals
85 85 #-----------------------------------------------------------------------------
86 86
87 87 # compiled regexps for autoindent management
88 88 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
89 89
90 90 #-----------------------------------------------------------------------------
91 91 # Utilities
92 92 #-----------------------------------------------------------------------------
93 93
94 94 def softspace(file, newvalue):
95 95 """Copied from code.py, to remove the dependency"""
96 96
97 97 oldvalue = 0
98 98 try:
99 99 oldvalue = file.softspace
100 100 except AttributeError:
101 101 pass
102 102 try:
103 103 file.softspace = newvalue
104 104 except (AttributeError, TypeError):
105 105 # "attribute-less object" or "read-only attributes"
106 106 pass
107 107 return oldvalue
108 108
109 109
110 110 def no_op(*a, **kw): pass
111 111
112 112 class NoOpContext(object):
113 113 def __enter__(self): pass
114 114 def __exit__(self, type, value, traceback): pass
115 115 no_op_context = NoOpContext()
116 116
117 117 class SpaceInInput(Exception): pass
118 118
119 119 class Bunch: pass
120 120
121 121
122 122 def get_default_colors():
123 123 if sys.platform=='darwin':
124 124 return "LightBG"
125 125 elif os.name=='nt':
126 126 return 'Linux'
127 127 else:
128 128 return 'Linux'
129 129
130 130
131 131 class SeparateUnicode(Unicode):
132 132 """A Unicode subclass to validate separate_in, separate_out, etc.
133 133
134 134 This is a Unicode based trait that converts '0'->'' and '\\n'->'\n'.
135 135 """
136 136
137 137 def validate(self, obj, value):
138 138 if value == '0': value = ''
139 139 value = value.replace('\\n','\n')
140 140 return super(SeparateUnicode, self).validate(obj, value)
141 141
142 142
143 143 class ReadlineNoRecord(object):
144 144 """Context manager to execute some code, then reload readline history
145 145 so that interactive input to the code doesn't appear when pressing up."""
146 146 def __init__(self, shell):
147 147 self.shell = shell
148 148 self._nested_level = 0
149 149
150 150 def __enter__(self):
151 151 if self._nested_level == 0:
152 152 try:
153 153 self.orig_length = self.current_length()
154 154 self.readline_tail = self.get_readline_tail()
155 155 except (AttributeError, IndexError): # Can fail with pyreadline
156 156 self.orig_length, self.readline_tail = 999999, []
157 157 self._nested_level += 1
158 158
159 159 def __exit__(self, type, value, traceback):
160 160 self._nested_level -= 1
161 161 if self._nested_level == 0:
162 162 # Try clipping the end if it's got longer
163 163 try:
164 164 e = self.current_length() - self.orig_length
165 165 if e > 0:
166 166 for _ in range(e):
167 167 self.shell.readline.remove_history_item(self.orig_length)
168 168
169 169 # If it still doesn't match, just reload readline history.
170 170 if self.current_length() != self.orig_length \
171 171 or self.get_readline_tail() != self.readline_tail:
172 172 self.shell.refill_readline_hist()
173 173 except (AttributeError, IndexError):
174 174 pass
175 175 # Returning False will cause exceptions to propagate
176 176 return False
177 177
178 178 def current_length(self):
179 179 return self.shell.readline.get_current_history_length()
180 180
181 181 def get_readline_tail(self, n=10):
182 182 """Get the last n items in readline history."""
183 183 end = self.shell.readline.get_current_history_length() + 1
184 184 start = max(end-n, 1)
185 185 ghi = self.shell.readline.get_history_item
186 186 return [ghi(x) for x in range(start, end)]
187 187
188 188
189 189 _autocall_help = """
190 190 Make IPython automatically call any callable object even if
191 191 you didn't type explicit parentheses. For example, 'str 43' becomes 'str(43)'
192 192 automatically. The value can be '0' to disable the feature, '1' for 'smart'
193 193 autocall, where it is not applied if there are no more arguments on the line,
194 194 and '2' for 'full' autocall, where all callable objects are automatically
195 195 called (even if no arguments are present). The default is '1'.
196 196 """
197 197
198 198 #-----------------------------------------------------------------------------
199 199 # Main IPython class
200 200 #-----------------------------------------------------------------------------
201 201
202 202 class InteractiveShell(SingletonConfigurable, Magic):
203 203 """An enhanced, interactive shell for Python."""
204 204
205 205 _instance = None
206 206
207 207 autocall = Enum((0,1,2), default_value=1, config=True, help=
208 208 """
209 209 Make IPython automatically call any callable object even if you didn't
210 210 type explicit parentheses. For example, 'str 43' becomes 'str(43)'
211 211 automatically. The value can be '0' to disable the feature, '1' for
212 212 'smart' autocall, where it is not applied if there are no more
213 213 arguments on the line, and '2' for 'full' autocall, where all callable
214 214 objects are automatically called (even if no arguments are present).
215 215 The default is '1'.
216 216 """
217 217 )
218 218 # TODO: remove all autoindent logic and put into frontends.
219 219 # We can't do this yet because even runlines uses the autoindent.
220 220 autoindent = CBool(True, config=True, help=
221 221 """
222 222 Autoindent IPython code entered interactively.
223 223 """
224 224 )
225 225 automagic = CBool(True, config=True, help=
226 226 """
227 227 Enable magic commands to be called without the leading %.
228 228 """
229 229 )
230 230 cache_size = Integer(1000, config=True, help=
231 231 """
232 232 Set the size of the output cache. The default is 1000, you can
233 233 change it permanently in your config file. Setting it to 0 completely
234 234 disables the caching system, and the minimum value accepted is 20 (if
235 235 you provide a value less than 20, it is reset to 0 and a warning is
236 236 issued). This limit is defined because otherwise you'll spend more
237 237 time re-flushing a too small cache than working
238 238 """
239 239 )
240 240 color_info = CBool(True, config=True, help=
241 241 """
242 242 Use colors for displaying information about objects. Because this
243 243 information is passed through a pager (like 'less'), and some pagers
244 244 get confused with color codes, this capability can be turned off.
245 245 """
246 246 )
247 247 colors = CaselessStrEnum(('NoColor','LightBG','Linux'),
248 248 default_value=get_default_colors(), config=True,
249 249 help="Set the color scheme (NoColor, Linux, or LightBG)."
250 250 )
251 251 colors_force = CBool(False, help=
252 252 """
253 253 Force use of ANSI color codes, regardless of OS and readline
254 254 availability.
255 255 """
256 256 # FIXME: This is essentially a hack to allow ZMQShell to show colors
257 257 # without readline on Win32. When the ZMQ formatting system is
258 258 # refactored, this should be removed.
259 259 )
260 260 debug = CBool(False, config=True)
261 261 deep_reload = CBool(False, config=True, help=
262 262 """
263 263 Enable deep (recursive) reloading by default. IPython can use the
264 264 deep_reload module which reloads changes in modules recursively (it
265 265 replaces the reload() function, so you don't need to change anything to
266 266 use it). deep_reload() forces a full reload of modules whose code may
267 267 have changed, which the default reload() function does not. When
268 268 deep_reload is off, IPython will use the normal reload(), but
269 269 deep_reload will still be available as dreload().
270 270 """
271 271 )
272 272 display_formatter = Instance(DisplayFormatter)
273 273 displayhook_class = Type(DisplayHook)
274 274 display_pub_class = Type(DisplayPublisher)
275 275
276 276 exit_now = CBool(False)
277 277 exiter = Instance(ExitAutocall)
278 278 def _exiter_default(self):
279 279 return ExitAutocall(self)
280 280 # Monotonically increasing execution counter
281 281 execution_count = Integer(1)
282 282 filename = Unicode("<ipython console>")
283 283 ipython_dir= Unicode('', config=True) # Set to get_ipython_dir() in __init__
284 284
285 285 # Input splitter, to split entire cells of input into either individual
286 286 # interactive statements or whole blocks.
287 287 input_splitter = Instance('IPython.core.inputsplitter.IPythonInputSplitter',
288 288 (), {})
289 289 logstart = CBool(False, config=True, help=
290 290 """
291 291 Start logging to the default log file.
292 292 """
293 293 )
294 294 logfile = Unicode('', config=True, help=
295 295 """
296 296 The name of the logfile to use.
297 297 """
298 298 )
299 299 logappend = Unicode('', config=True, help=
300 300 """
301 301 Start logging to the given file in append mode.
302 302 """
303 303 )
304 304 object_info_string_level = Enum((0,1,2), default_value=0,
305 305 config=True)
306 306 pdb = CBool(False, config=True, help=
307 307 """
308 308 Automatically call the pdb debugger after every exception.
309 309 """
310 310 )
311 311 multiline_history = CBool(sys.platform != 'win32', config=True,
312 312 help="Save multi-line entries as one entry in readline history"
313 313 )
314 314
315 315 prompt_in1 = Unicode('In [\\#]: ', config=True)
316 316 prompt_in2 = Unicode(' .\\D.: ', config=True)
317 317 prompt_out = Unicode('Out[\\#]: ', config=True)
318 318 prompts_pad_left = CBool(True, config=True)
319 319 quiet = CBool(False, config=True)
320 320
321 321 history_length = Integer(10000, config=True)
322 322
323 323 # The readline stuff will eventually be moved to the terminal subclass
324 324 # but for now, we can't do that as readline is welded in everywhere.
325 325 readline_use = CBool(True, config=True)
326 326 readline_remove_delims = Unicode('-/~', config=True)
327 327 # don't use \M- bindings by default, because they
328 328 # conflict with 8-bit encodings. See gh-58,gh-88
329 329 readline_parse_and_bind = List([
330 330 'tab: complete',
331 331 '"\C-l": clear-screen',
332 332 'set show-all-if-ambiguous on',
333 333 '"\C-o": tab-insert',
334 334 '"\C-r": reverse-search-history',
335 335 '"\C-s": forward-search-history',
336 336 '"\C-p": history-search-backward',
337 337 '"\C-n": history-search-forward',
338 338 '"\e[A": history-search-backward',
339 339 '"\e[B": history-search-forward',
340 340 '"\C-k": kill-line',
341 341 '"\C-u": unix-line-discard',
342 342 ], allow_none=False, config=True)
343 343
344 344 # TODO: this part of prompt management should be moved to the frontends.
345 345 # Use custom TraitTypes that convert '0'->'' and '\\n'->'\n'
346 346 separate_in = SeparateUnicode('\n', config=True)
347 347 separate_out = SeparateUnicode('', config=True)
348 348 separate_out2 = SeparateUnicode('', config=True)
349 349 wildcards_case_sensitive = CBool(True, config=True)
350 350 xmode = CaselessStrEnum(('Context','Plain', 'Verbose'),
351 351 default_value='Context', config=True)
352 352
353 353 # Subcomponents of InteractiveShell
354 354 alias_manager = Instance('IPython.core.alias.AliasManager')
355 355 prefilter_manager = Instance('IPython.core.prefilter.PrefilterManager')
356 356 builtin_trap = Instance('IPython.core.builtin_trap.BuiltinTrap')
357 357 display_trap = Instance('IPython.core.display_trap.DisplayTrap')
358 358 extension_manager = Instance('IPython.core.extensions.ExtensionManager')
359 359 plugin_manager = Instance('IPython.core.plugin.PluginManager')
360 360 payload_manager = Instance('IPython.core.payload.PayloadManager')
361 361 history_manager = Instance('IPython.core.history.HistoryManager')
362 362
363 363 profile_dir = Instance('IPython.core.application.ProfileDir')
364 364 @property
365 365 def profile(self):
366 366 if self.profile_dir is not None:
367 367 name = os.path.basename(self.profile_dir.location)
368 368 return name.replace('profile_','')
369 369
370 370
371 371 # Private interface
372 372 _post_execute = Instance(dict)
373 373
374 374 def __init__(self, config=None, ipython_dir=None, profile_dir=None,
375 375 user_ns=None, user_global_ns=None,
376 376 custom_exceptions=((), None)):
377 377
378 378 # This is where traits with a config_key argument are updated
379 379 # from the values on config.
380 380 super(InteractiveShell, self).__init__(config=config)
381 381 self.configurables = [self]
382 382
383 383 # These are relatively independent and stateless
384 384 self.init_ipython_dir(ipython_dir)
385 385 self.init_profile_dir(profile_dir)
386 386 self.init_instance_attrs()
387 387 self.init_environment()
388 388
389 389 # Create namespaces (user_ns, user_global_ns, etc.)
390 390 self.init_create_namespaces(user_ns, user_global_ns)
391 391 # This has to be done after init_create_namespaces because it uses
392 392 # something in self.user_ns, but before init_sys_modules, which
393 393 # is the first thing to modify sys.
394 394 # TODO: When we override sys.stdout and sys.stderr before this class
395 395 # is created, we are saving the overridden ones here. Not sure if this
396 396 # is what we want to do.
397 397 self.save_sys_module_state()
398 398 self.init_sys_modules()
399 399
400 400 # While we're trying to have each part of the code directly access what
401 401 # it needs without keeping redundant references to objects, we have too
402 402 # much legacy code that expects ip.db to exist.
403 403 self.db = PickleShareDB(os.path.join(self.profile_dir.location, 'db'))
404 404
405 405 self.init_history()
406 406 self.init_encoding()
407 407 self.init_prefilter()
408 408
409 409 Magic.__init__(self, self)
410 410
411 411 self.init_syntax_highlighting()
412 412 self.init_hooks()
413 413 self.init_pushd_popd_magic()
414 414 # self.init_traceback_handlers use to be here, but we moved it below
415 415 # because it and init_io have to come after init_readline.
416 416 self.init_user_ns()
417 417 self.init_logger()
418 418 self.init_alias()
419 419 self.init_builtins()
420 420
421 421 # pre_config_initialization
422 422
423 423 # The next section should contain everything that was in ipmaker.
424 424 self.init_logstart()
425 425
426 426 # The following was in post_config_initialization
427 427 self.init_inspector()
428 428 # init_readline() must come before init_io(), because init_io uses
429 429 # readline related things.
430 430 self.init_readline()
431 431 # We save this here in case user code replaces raw_input, but it needs
432 432 # to be after init_readline(), because PyPy's readline works by replacing
433 433 # raw_input.
434 434 if py3compat.PY3:
435 435 self.raw_input_original = input
436 436 else:
437 437 self.raw_input_original = raw_input
438 438 # init_completer must come after init_readline, because it needs to
439 439 # know whether readline is present or not system-wide to configure the
440 440 # completers, since the completion machinery can now operate
441 441 # independently of readline (e.g. over the network)
442 442 self.init_completer()
443 443 # TODO: init_io() needs to happen before init_traceback handlers
444 444 # because the traceback handlers hardcode the stdout/stderr streams.
445 445 # This logic in in debugger.Pdb and should eventually be changed.
446 446 self.init_io()
447 447 self.init_traceback_handlers(custom_exceptions)
448 448 self.init_prompts()
449 449 self.init_display_formatter()
450 450 self.init_display_pub()
451 451 self.init_displayhook()
452 452 self.init_reload_doctest()
453 453 self.init_magics()
454 454 self.init_pdb()
455 455 self.init_extension_manager()
456 456 self.init_plugin_manager()
457 457 self.init_payload()
458 458 self.hooks.late_startup_hook()
459 459 atexit.register(self.atexit_operations)
460 460
461 461 def get_ipython(self):
462 462 """Return the currently running IPython instance."""
463 463 return self
464 464
465 465 #-------------------------------------------------------------------------
466 466 # Trait changed handlers
467 467 #-------------------------------------------------------------------------
468 468
469 469 def _ipython_dir_changed(self, name, new):
470 470 if not os.path.isdir(new):
471 471 os.makedirs(new, mode = 0777)
472 472
473 473 def set_autoindent(self,value=None):
474 474 """Set the autoindent flag, checking for readline support.
475 475
476 476 If called with no arguments, it acts as a toggle."""
477 477
478 478 if value != 0 and not self.has_readline:
479 479 if os.name == 'posix':
480 480 warn("The auto-indent feature requires the readline library")
481 481 self.autoindent = 0
482 482 return
483 483 if value is None:
484 484 self.autoindent = not self.autoindent
485 485 else:
486 486 self.autoindent = value
487 487
488 488 #-------------------------------------------------------------------------
489 489 # init_* methods called by __init__
490 490 #-------------------------------------------------------------------------
491 491
492 492 def init_ipython_dir(self, ipython_dir):
493 493 if ipython_dir is not None:
494 494 self.ipython_dir = ipython_dir
495 495 return
496 496
497 497 self.ipython_dir = get_ipython_dir()
498 498
499 499 def init_profile_dir(self, profile_dir):
500 500 if profile_dir is not None:
501 501 self.profile_dir = profile_dir
502 502 return
503 503 self.profile_dir =\
504 504 ProfileDir.create_profile_dir_by_name(self.ipython_dir, 'default')
505 505
506 506 def init_instance_attrs(self):
507 507 self.more = False
508 508
509 509 # command compiler
510 510 self.compile = CachingCompiler()
511 511
512 512 # Make an empty namespace, which extension writers can rely on both
513 513 # existing and NEVER being used by ipython itself. This gives them a
514 514 # convenient location for storing additional information and state
515 515 # their extensions may require, without fear of collisions with other
516 516 # ipython names that may develop later.
517 517 self.meta = Struct()
518 518
519 519 # Temporary files used for various purposes. Deleted at exit.
520 520 self.tempfiles = []
521 521
522 522 # Keep track of readline usage (later set by init_readline)
523 523 self.has_readline = False
524 524
525 525 # keep track of where we started running (mainly for crash post-mortem)
526 526 # This is not being used anywhere currently.
527 527 self.starting_dir = os.getcwdu()
528 528
529 529 # Indentation management
530 530 self.indent_current_nsp = 0
531 531
532 532 # Dict to track post-execution functions that have been registered
533 533 self._post_execute = {}
534 534
535 535 def init_environment(self):
536 536 """Any changes we need to make to the user's environment."""
537 537 pass
538 538
539 539 def init_encoding(self):
540 540 # Get system encoding at startup time. Certain terminals (like Emacs
541 541 # under Win32 have it set to None, and we need to have a known valid
542 542 # encoding to use in the raw_input() method
543 543 try:
544 544 self.stdin_encoding = sys.stdin.encoding or 'ascii'
545 545 except AttributeError:
546 546 self.stdin_encoding = 'ascii'
547 547
548 548 def init_syntax_highlighting(self):
549 549 # Python source parser/formatter for syntax highlighting
550 550 pyformat = PyColorize.Parser().format
551 551 self.pycolorize = lambda src: pyformat(src,'str',self.colors)
552 552
553 553 def init_pushd_popd_magic(self):
554 554 # for pushd/popd management
555 555 try:
556 556 self.home_dir = get_home_dir()
557 557 except HomeDirError, msg:
558 558 fatal(msg)
559 559
560 560 self.dir_stack = []
561 561
562 562 def init_logger(self):
563 563 self.logger = Logger(self.home_dir, logfname='ipython_log.py',
564 564 logmode='rotate')
565 565
566 566 def init_logstart(self):
567 567 """Initialize logging in case it was requested at the command line.
568 568 """
569 569 if self.logappend:
570 570 self.magic_logstart(self.logappend + ' append')
571 571 elif self.logfile:
572 572 self.magic_logstart(self.logfile)
573 573 elif self.logstart:
574 574 self.magic_logstart()
575 575
576 576 def init_builtins(self):
577 577 self.builtin_trap = BuiltinTrap(shell=self)
578 578
579 579 def init_inspector(self):
580 580 # Object inspector
581 581 self.inspector = oinspect.Inspector(oinspect.InspectColors,
582 582 PyColorize.ANSICodeColors,
583 583 'NoColor',
584 584 self.object_info_string_level)
585 585
586 586 def init_io(self):
587 587 # This will just use sys.stdout and sys.stderr. If you want to
588 588 # override sys.stdout and sys.stderr themselves, you need to do that
589 589 # *before* instantiating this class, because io holds onto
590 590 # references to the underlying streams.
591 591 if sys.platform == 'win32' and self.has_readline:
592 592 io.stdout = io.stderr = io.IOStream(self.readline._outputfile)
593 593 else:
594 594 io.stdout = io.IOStream(sys.stdout)
595 595 io.stderr = io.IOStream(sys.stderr)
596 596
597 597 def init_prompts(self):
598 598 # TODO: This is a pass for now because the prompts are managed inside
599 599 # the DisplayHook. Once there is a separate prompt manager, this
600 600 # will initialize that object and all prompt related information.
601 601 pass
602 602
603 603 def init_display_formatter(self):
604 604 self.display_formatter = DisplayFormatter(config=self.config)
605 605 self.configurables.append(self.display_formatter)
606 606
607 607 def init_display_pub(self):
608 608 self.display_pub = self.display_pub_class(config=self.config)
609 609 self.configurables.append(self.display_pub)
610 610
611 611 def init_displayhook(self):
612 612 # Initialize displayhook, set in/out prompts and printing system
613 613 self.displayhook = self.displayhook_class(
614 614 config=self.config,
615 615 shell=self,
616 616 cache_size=self.cache_size,
617 617 input_sep = self.separate_in,
618 618 output_sep = self.separate_out,
619 619 output_sep2 = self.separate_out2,
620 620 ps1 = self.prompt_in1,
621 621 ps2 = self.prompt_in2,
622 622 ps_out = self.prompt_out,
623 623 pad_left = self.prompts_pad_left
624 624 )
625 625 self.configurables.append(self.displayhook)
626 626 # This is a context manager that installs/revmoes the displayhook at
627 627 # the appropriate time.
628 628 self.display_trap = DisplayTrap(hook=self.displayhook)
629 629
630 630 def init_reload_doctest(self):
631 631 # Do a proper resetting of doctest, including the necessary displayhook
632 632 # monkeypatching
633 633 try:
634 634 doctest_reload()
635 635 except ImportError:
636 636 warn("doctest module does not exist.")
637 637
638 638 #-------------------------------------------------------------------------
639 639 # Things related to injections into the sys module
640 640 #-------------------------------------------------------------------------
641 641
642 642 def save_sys_module_state(self):
643 643 """Save the state of hooks in the sys module.
644 644
645 645 This has to be called after self.user_ns is created.
646 646 """
647 647 self._orig_sys_module_state = {}
648 648 self._orig_sys_module_state['stdin'] = sys.stdin
649 649 self._orig_sys_module_state['stdout'] = sys.stdout
650 650 self._orig_sys_module_state['stderr'] = sys.stderr
651 651 self._orig_sys_module_state['excepthook'] = sys.excepthook
652 652 try:
653 653 self._orig_sys_modules_main_name = self.user_ns['__name__']
654 654 except KeyError:
655 655 pass
656 656
657 657 def restore_sys_module_state(self):
658 658 """Restore the state of the sys module."""
659 659 try:
660 660 for k, v in self._orig_sys_module_state.iteritems():
661 661 setattr(sys, k, v)
662 662 except AttributeError:
663 663 pass
664 664 # Reset what what done in self.init_sys_modules
665 665 try:
666 666 sys.modules[self.user_ns['__name__']] = self._orig_sys_modules_main_name
667 667 except (AttributeError, KeyError):
668 668 pass
669 669
670 670 #-------------------------------------------------------------------------
671 671 # Things related to hooks
672 672 #-------------------------------------------------------------------------
673 673
674 674 def init_hooks(self):
675 675 # hooks holds pointers used for user-side customizations
676 676 self.hooks = Struct()
677 677
678 678 self.strdispatchers = {}
679 679
680 680 # Set all default hooks, defined in the IPython.hooks module.
681 681 hooks = IPython.core.hooks
682 682 for hook_name in hooks.__all__:
683 683 # default hooks have priority 100, i.e. low; user hooks should have
684 684 # 0-100 priority
685 685 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
686 686
687 687 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
688 688 """set_hook(name,hook) -> sets an internal IPython hook.
689 689
690 690 IPython exposes some of its internal API as user-modifiable hooks. By
691 691 adding your function to one of these hooks, you can modify IPython's
692 692 behavior to call at runtime your own routines."""
693 693
694 694 # At some point in the future, this should validate the hook before it
695 695 # accepts it. Probably at least check that the hook takes the number
696 696 # of args it's supposed to.
697 697
698 698 f = types.MethodType(hook,self)
699 699
700 700 # check if the hook is for strdispatcher first
701 701 if str_key is not None:
702 702 sdp = self.strdispatchers.get(name, StrDispatch())
703 703 sdp.add_s(str_key, f, priority )
704 704 self.strdispatchers[name] = sdp
705 705 return
706 706 if re_key is not None:
707 707 sdp = self.strdispatchers.get(name, StrDispatch())
708 708 sdp.add_re(re.compile(re_key), f, priority )
709 709 self.strdispatchers[name] = sdp
710 710 return
711 711
712 712 dp = getattr(self.hooks, name, None)
713 713 if name not in IPython.core.hooks.__all__:
714 714 print "Warning! Hook '%s' is not one of %s" % \
715 715 (name, IPython.core.hooks.__all__ )
716 716 if not dp:
717 717 dp = IPython.core.hooks.CommandChainDispatcher()
718 718
719 719 try:
720 720 dp.add(f,priority)
721 721 except AttributeError:
722 722 # it was not commandchain, plain old func - replace
723 723 dp = f
724 724
725 725 setattr(self.hooks,name, dp)
726 726
727 727 def register_post_execute(self, func):
728 728 """Register a function for calling after code execution.
729 729 """
730 730 if not callable(func):
731 731 raise ValueError('argument %s must be callable' % func)
732 732 self._post_execute[func] = True
733 733
734 734 #-------------------------------------------------------------------------
735 735 # Things related to the "main" module
736 736 #-------------------------------------------------------------------------
737 737
738 738 def new_main_mod(self,ns=None):
739 739 """Return a new 'main' module object for user code execution.
740 740 """
741 741 main_mod = self._user_main_module
742 742 init_fakemod_dict(main_mod,ns)
743 743 return main_mod
744 744
745 745 def cache_main_mod(self,ns,fname):
746 746 """Cache a main module's namespace.
747 747
748 748 When scripts are executed via %run, we must keep a reference to the
749 749 namespace of their __main__ module (a FakeModule instance) around so
750 750 that Python doesn't clear it, rendering objects defined therein
751 751 useless.
752 752
753 753 This method keeps said reference in a private dict, keyed by the
754 754 absolute path of the module object (which corresponds to the script
755 755 path). This way, for multiple executions of the same script we only
756 756 keep one copy of the namespace (the last one), thus preventing memory
757 757 leaks from old references while allowing the objects from the last
758 758 execution to be accessible.
759 759
760 760 Note: we can not allow the actual FakeModule instances to be deleted,
761 761 because of how Python tears down modules (it hard-sets all their
762 762 references to None without regard for reference counts). This method
763 763 must therefore make a *copy* of the given namespace, to allow the
764 764 original module's __dict__ to be cleared and reused.
765 765
766 766
767 767 Parameters
768 768 ----------
769 769 ns : a namespace (a dict, typically)
770 770
771 771 fname : str
772 772 Filename associated with the namespace.
773 773
774 774 Examples
775 775 --------
776 776
777 777 In [10]: import IPython
778 778
779 779 In [11]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
780 780
781 781 In [12]: IPython.__file__ in _ip._main_ns_cache
782 782 Out[12]: True
783 783 """
784 784 self._main_ns_cache[os.path.abspath(fname)] = ns.copy()
785 785
786 786 def clear_main_mod_cache(self):
787 787 """Clear the cache of main modules.
788 788
789 789 Mainly for use by utilities like %reset.
790 790
791 791 Examples
792 792 --------
793 793
794 794 In [15]: import IPython
795 795
796 796 In [16]: _ip.cache_main_mod(IPython.__dict__,IPython.__file__)
797 797
798 798 In [17]: len(_ip._main_ns_cache) > 0
799 799 Out[17]: True
800 800
801 801 In [18]: _ip.clear_main_mod_cache()
802 802
803 803 In [19]: len(_ip._main_ns_cache) == 0
804 804 Out[19]: True
805 805 """
806 806 self._main_ns_cache.clear()
807 807
808 808 #-------------------------------------------------------------------------
809 809 # Things related to debugging
810 810 #-------------------------------------------------------------------------
811 811
812 812 def init_pdb(self):
813 813 # Set calling of pdb on exceptions
814 814 # self.call_pdb is a property
815 815 self.call_pdb = self.pdb
816 816
817 817 def _get_call_pdb(self):
818 818 return self._call_pdb
819 819
820 820 def _set_call_pdb(self,val):
821 821
822 822 if val not in (0,1,False,True):
823 823 raise ValueError,'new call_pdb value must be boolean'
824 824
825 825 # store value in instance
826 826 self._call_pdb = val
827 827
828 828 # notify the actual exception handlers
829 829 self.InteractiveTB.call_pdb = val
830 830
831 831 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
832 832 'Control auto-activation of pdb at exceptions')
833 833
834 834 def debugger(self,force=False):
835 835 """Call the pydb/pdb debugger.
836 836
837 837 Keywords:
838 838
839 839 - force(False): by default, this routine checks the instance call_pdb
840 840 flag and does not actually invoke the debugger if the flag is false.
841 841 The 'force' option forces the debugger to activate even if the flag
842 842 is false.
843 843 """
844 844
845 845 if not (force or self.call_pdb):
846 846 return
847 847
848 848 if not hasattr(sys,'last_traceback'):
849 849 error('No traceback has been produced, nothing to debug.')
850 850 return
851 851
852 852 # use pydb if available
853 853 if debugger.has_pydb:
854 854 from pydb import pm
855 855 else:
856 856 # fallback to our internal debugger
857 857 pm = lambda : self.InteractiveTB.debugger(force=True)
858 858
859 859 with self.readline_no_record:
860 860 pm()
861 861
862 862 #-------------------------------------------------------------------------
863 863 # Things related to IPython's various namespaces
864 864 #-------------------------------------------------------------------------
865 865
866 866 def init_create_namespaces(self, user_ns=None, user_global_ns=None):
867 867 # Create the namespace where the user will operate. user_ns is
868 868 # normally the only one used, and it is passed to the exec calls as
869 869 # the locals argument. But we do carry a user_global_ns namespace
870 870 # given as the exec 'globals' argument, This is useful in embedding
871 871 # situations where the ipython shell opens in a context where the
872 872 # distinction between locals and globals is meaningful. For
873 873 # non-embedded contexts, it is just the same object as the user_ns dict.
874 874
875 875 # FIXME. For some strange reason, __builtins__ is showing up at user
876 876 # level as a dict instead of a module. This is a manual fix, but I
877 877 # should really track down where the problem is coming from. Alex
878 878 # Schmolck reported this problem first.
879 879
880 880 # A useful post by Alex Martelli on this topic:
881 881 # Re: inconsistent value from __builtins__
882 882 # Von: Alex Martelli <aleaxit@yahoo.com>
883 883 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
884 884 # Gruppen: comp.lang.python
885 885
886 886 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
887 887 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
888 888 # > <type 'dict'>
889 889 # > >>> print type(__builtins__)
890 890 # > <type 'module'>
891 891 # > Is this difference in return value intentional?
892 892
893 893 # Well, it's documented that '__builtins__' can be either a dictionary
894 894 # or a module, and it's been that way for a long time. Whether it's
895 895 # intentional (or sensible), I don't know. In any case, the idea is
896 896 # that if you need to access the built-in namespace directly, you
897 897 # should start with "import __builtin__" (note, no 's') which will
898 898 # definitely give you a module. Yeah, it's somewhat confusing:-(.
899 899
900 900 # These routines return properly built dicts as needed by the rest of
901 901 # the code, and can also be used by extension writers to generate
902 902 # properly initialized namespaces.
903 903 user_ns, user_global_ns = self.make_user_namespaces(user_ns,
904 904 user_global_ns)
905 905
906 906 # Assign namespaces
907 907 # This is the namespace where all normal user variables live
908 908 self.user_ns = user_ns
909 909 self.user_global_ns = user_global_ns
910 910
911 911 # An auxiliary namespace that checks what parts of the user_ns were
912 912 # loaded at startup, so we can list later only variables defined in
913 913 # actual interactive use. Since it is always a subset of user_ns, it
914 914 # doesn't need to be separately tracked in the ns_table.
915 915 self.user_ns_hidden = {}
916 916
917 917 # A namespace to keep track of internal data structures to prevent
918 918 # them from cluttering user-visible stuff. Will be updated later
919 919 self.internal_ns = {}
920 920
921 921 # Now that FakeModule produces a real module, we've run into a nasty
922 922 # problem: after script execution (via %run), the module where the user
923 923 # code ran is deleted. Now that this object is a true module (needed
924 924 # so docetst and other tools work correctly), the Python module
925 925 # teardown mechanism runs over it, and sets to None every variable
926 926 # present in that module. Top-level references to objects from the
927 927 # script survive, because the user_ns is updated with them. However,
928 928 # calling functions defined in the script that use other things from
929 929 # the script will fail, because the function's closure had references
930 930 # to the original objects, which are now all None. So we must protect
931 931 # these modules from deletion by keeping a cache.
932 932 #
933 933 # To avoid keeping stale modules around (we only need the one from the
934 934 # last run), we use a dict keyed with the full path to the script, so
935 935 # only the last version of the module is held in the cache. Note,
936 936 # however, that we must cache the module *namespace contents* (their
937 937 # __dict__). Because if we try to cache the actual modules, old ones
938 938 # (uncached) could be destroyed while still holding references (such as
939 939 # those held by GUI objects that tend to be long-lived)>
940 940 #
941 941 # The %reset command will flush this cache. See the cache_main_mod()
942 942 # and clear_main_mod_cache() methods for details on use.
943 943
944 944 # This is the cache used for 'main' namespaces
945 945 self._main_ns_cache = {}
946 946 # And this is the single instance of FakeModule whose __dict__ we keep
947 947 # copying and clearing for reuse on each %run
948 948 self._user_main_module = FakeModule()
949 949
950 950 # A table holding all the namespaces IPython deals with, so that
951 951 # introspection facilities can search easily.
952 952 self.ns_table = {'user':user_ns,
953 953 'user_global':user_global_ns,
954 954 'internal':self.internal_ns,
955 955 'builtin':builtin_mod.__dict__
956 956 }
957 957
958 958 # Similarly, track all namespaces where references can be held and that
959 959 # we can safely clear (so it can NOT include builtin). This one can be
960 960 # a simple list. Note that the main execution namespaces, user_ns and
961 961 # user_global_ns, can NOT be listed here, as clearing them blindly
962 962 # causes errors in object __del__ methods. Instead, the reset() method
963 963 # clears them manually and carefully.
964 964 self.ns_refs_table = [ self.user_ns_hidden,
965 965 self.internal_ns, self._main_ns_cache ]
966 966
967 967 def make_user_namespaces(self, user_ns=None, user_global_ns=None):
968 968 """Return a valid local and global user interactive namespaces.
969 969
970 970 This builds a dict with the minimal information needed to operate as a
971 971 valid IPython user namespace, which you can pass to the various
972 972 embedding classes in ipython. The default implementation returns the
973 973 same dict for both the locals and the globals to allow functions to
974 974 refer to variables in the namespace. Customized implementations can
975 975 return different dicts. The locals dictionary can actually be anything
976 976 following the basic mapping protocol of a dict, but the globals dict
977 977 must be a true dict, not even a subclass. It is recommended that any
978 978 custom object for the locals namespace synchronize with the globals
979 979 dict somehow.
980 980
981 981 Raises TypeError if the provided globals namespace is not a true dict.
982 982
983 983 Parameters
984 984 ----------
985 985 user_ns : dict-like, optional
986 986 The current user namespace. The items in this namespace should
987 987 be included in the output. If None, an appropriate blank
988 988 namespace should be created.
989 989 user_global_ns : dict, optional
990 990 The current user global namespace. The items in this namespace
991 991 should be included in the output. If None, an appropriate
992 992 blank namespace should be created.
993 993
994 994 Returns
995 995 -------
996 996 A pair of dictionary-like object to be used as the local namespace
997 997 of the interpreter and a dict to be used as the global namespace.
998 998 """
999 999
1000 1000
1001 1001 # We must ensure that __builtin__ (without the final 's') is always
1002 1002 # available and pointing to the __builtin__ *module*. For more details:
1003 1003 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1004 1004
1005 1005 if user_ns is None:
1006 1006 # Set __name__ to __main__ to better match the behavior of the
1007 1007 # normal interpreter.
1008 1008 user_ns = {'__name__' :'__main__',
1009 1009 py3compat.builtin_mod_name: builtin_mod,
1010 1010 '__builtins__' : builtin_mod,
1011 1011 }
1012 1012 else:
1013 1013 user_ns.setdefault('__name__','__main__')
1014 1014 user_ns.setdefault(py3compat.builtin_mod_name,builtin_mod)
1015 1015 user_ns.setdefault('__builtins__',builtin_mod)
1016 1016
1017 1017 if user_global_ns is None:
1018 1018 user_global_ns = user_ns
1019 1019 if type(user_global_ns) is not dict:
1020 1020 raise TypeError("user_global_ns must be a true dict; got %r"
1021 1021 % type(user_global_ns))
1022 1022
1023 1023 return user_ns, user_global_ns
1024 1024
1025 1025 def init_sys_modules(self):
1026 1026 # We need to insert into sys.modules something that looks like a
1027 1027 # module but which accesses the IPython namespace, for shelve and
1028 1028 # pickle to work interactively. Normally they rely on getting
1029 1029 # everything out of __main__, but for embedding purposes each IPython
1030 1030 # instance has its own private namespace, so we can't go shoving
1031 1031 # everything into __main__.
1032 1032
1033 1033 # note, however, that we should only do this for non-embedded
1034 1034 # ipythons, which really mimic the __main__.__dict__ with their own
1035 1035 # namespace. Embedded instances, on the other hand, should not do
1036 1036 # this because they need to manage the user local/global namespaces
1037 1037 # only, but they live within a 'normal' __main__ (meaning, they
1038 1038 # shouldn't overtake the execution environment of the script they're
1039 1039 # embedded in).
1040 1040
1041 1041 # This is overridden in the InteractiveShellEmbed subclass to a no-op.
1042 1042
1043 1043 try:
1044 1044 main_name = self.user_ns['__name__']
1045 1045 except KeyError:
1046 1046 raise KeyError('user_ns dictionary MUST have a "__name__" key')
1047 1047 else:
1048 1048 sys.modules[main_name] = FakeModule(self.user_ns)
1049 1049
1050 1050 def init_user_ns(self):
1051 1051 """Initialize all user-visible namespaces to their minimum defaults.
1052 1052
1053 1053 Certain history lists are also initialized here, as they effectively
1054 1054 act as user namespaces.
1055 1055
1056 1056 Notes
1057 1057 -----
1058 1058 All data structures here are only filled in, they are NOT reset by this
1059 1059 method. If they were not empty before, data will simply be added to
1060 1060 therm.
1061 1061 """
1062 1062 # This function works in two parts: first we put a few things in
1063 1063 # user_ns, and we sync that contents into user_ns_hidden so that these
1064 1064 # initial variables aren't shown by %who. After the sync, we add the
1065 1065 # rest of what we *do* want the user to see with %who even on a new
1066 1066 # session (probably nothing, so theye really only see their own stuff)
1067 1067
1068 1068 # The user dict must *always* have a __builtin__ reference to the
1069 1069 # Python standard __builtin__ namespace, which must be imported.
1070 1070 # This is so that certain operations in prompt evaluation can be
1071 1071 # reliably executed with builtins. Note that we can NOT use
1072 1072 # __builtins__ (note the 's'), because that can either be a dict or a
1073 1073 # module, and can even mutate at runtime, depending on the context
1074 1074 # (Python makes no guarantees on it). In contrast, __builtin__ is
1075 1075 # always a module object, though it must be explicitly imported.
1076 1076
1077 1077 # For more details:
1078 1078 # http://mail.python.org/pipermail/python-dev/2001-April/014068.html
1079 1079 ns = dict(__builtin__ = builtin_mod)
1080 1080
1081 1081 # Put 'help' in the user namespace
1082 1082 try:
1083 1083 from site import _Helper
1084 1084 ns['help'] = _Helper()
1085 1085 except ImportError:
1086 1086 warn('help() not available - check site.py')
1087 1087
1088 1088 # make global variables for user access to the histories
1089 1089 ns['_ih'] = self.history_manager.input_hist_parsed
1090 1090 ns['_oh'] = self.history_manager.output_hist
1091 1091 ns['_dh'] = self.history_manager.dir_hist
1092 1092
1093 1093 ns['_sh'] = shadowns
1094 1094
1095 1095 # user aliases to input and output histories. These shouldn't show up
1096 1096 # in %who, as they can have very large reprs.
1097 1097 ns['In'] = self.history_manager.input_hist_parsed
1098 1098 ns['Out'] = self.history_manager.output_hist
1099 1099
1100 1100 # Store myself as the public api!!!
1101 1101 ns['get_ipython'] = self.get_ipython
1102 1102
1103 1103 ns['exit'] = self.exiter
1104 1104 ns['quit'] = self.exiter
1105 1105
1106 1106 # Sync what we've added so far to user_ns_hidden so these aren't seen
1107 1107 # by %who
1108 1108 self.user_ns_hidden.update(ns)
1109 1109
1110 1110 # Anything put into ns now would show up in %who. Think twice before
1111 1111 # putting anything here, as we really want %who to show the user their
1112 1112 # stuff, not our variables.
1113 1113
1114 1114 # Finally, update the real user's namespace
1115 1115 self.user_ns.update(ns)
1116 1116
1117 1117 def reset(self, new_session=True):
1118 1118 """Clear all internal namespaces, and attempt to release references to
1119 1119 user objects.
1120 1120
1121 1121 If new_session is True, a new history session will be opened.
1122 1122 """
1123 1123 # Clear histories
1124 1124 self.history_manager.reset(new_session)
1125 1125 # Reset counter used to index all histories
1126 1126 if new_session:
1127 1127 self.execution_count = 1
1128 1128
1129 1129 # Flush cached output items
1130 1130 if self.displayhook.do_full_cache:
1131 1131 self.displayhook.flush()
1132 1132
1133 1133 # Restore the user namespaces to minimal usability
1134 1134 for ns in self.ns_refs_table:
1135 1135 ns.clear()
1136 1136
1137 1137 # The main execution namespaces must be cleared very carefully,
1138 1138 # skipping the deletion of the builtin-related keys, because doing so
1139 1139 # would cause errors in many object's __del__ methods.
1140 1140 for ns in [self.user_ns, self.user_global_ns]:
1141 1141 drop_keys = set(ns.keys())
1142 1142 drop_keys.discard('__builtin__')
1143 1143 drop_keys.discard('__builtins__')
1144 1144 for k in drop_keys:
1145 1145 del ns[k]
1146 1146
1147 1147 # Restore the user namespaces to minimal usability
1148 1148 self.init_user_ns()
1149 1149
1150 1150 # Restore the default and user aliases
1151 1151 self.alias_manager.clear_aliases()
1152 1152 self.alias_manager.init_aliases()
1153 1153
1154 1154 # Flush the private list of module references kept for script
1155 1155 # execution protection
1156 1156 self.clear_main_mod_cache()
1157 1157
1158 1158 # Clear out the namespace from the last %run
1159 1159 self.new_main_mod()
1160 1160
1161 1161 def del_var(self, varname, by_name=False):
1162 1162 """Delete a variable from the various namespaces, so that, as
1163 1163 far as possible, we're not keeping any hidden references to it.
1164 1164
1165 1165 Parameters
1166 1166 ----------
1167 1167 varname : str
1168 1168 The name of the variable to delete.
1169 1169 by_name : bool
1170 1170 If True, delete variables with the given name in each
1171 1171 namespace. If False (default), find the variable in the user
1172 1172 namespace, and delete references to it.
1173 1173 """
1174 1174 if varname in ('__builtin__', '__builtins__'):
1175 1175 raise ValueError("Refusing to delete %s" % varname)
1176 1176 ns_refs = self.ns_refs_table + [self.user_ns,
1177 1177 self.user_global_ns, self._user_main_module.__dict__] +\
1178 1178 self._main_ns_cache.values()
1179 1179
1180 1180 if by_name: # Delete by name
1181 1181 for ns in ns_refs:
1182 1182 try:
1183 1183 del ns[varname]
1184 1184 except KeyError:
1185 1185 pass
1186 1186 else: # Delete by object
1187 1187 try:
1188 1188 obj = self.user_ns[varname]
1189 1189 except KeyError:
1190 1190 raise NameError("name '%s' is not defined" % varname)
1191 1191 # Also check in output history
1192 1192 ns_refs.append(self.history_manager.output_hist)
1193 1193 for ns in ns_refs:
1194 1194 to_delete = [n for n, o in ns.iteritems() if o is obj]
1195 1195 for name in to_delete:
1196 1196 del ns[name]
1197 1197
1198 1198 # displayhook keeps extra references, but not in a dictionary
1199 1199 for name in ('_', '__', '___'):
1200 1200 if getattr(self.displayhook, name) is obj:
1201 1201 setattr(self.displayhook, name, None)
1202 1202
1203 1203 def reset_selective(self, regex=None):
1204 1204 """Clear selective variables from internal namespaces based on a
1205 1205 specified regular expression.
1206 1206
1207 1207 Parameters
1208 1208 ----------
1209 1209 regex : string or compiled pattern, optional
1210 1210 A regular expression pattern that will be used in searching
1211 1211 variable names in the users namespaces.
1212 1212 """
1213 1213 if regex is not None:
1214 1214 try:
1215 1215 m = re.compile(regex)
1216 1216 except TypeError:
1217 1217 raise TypeError('regex must be a string or compiled pattern')
1218 1218 # Search for keys in each namespace that match the given regex
1219 1219 # If a match is found, delete the key/value pair.
1220 1220 for ns in self.ns_refs_table:
1221 1221 for var in ns:
1222 1222 if m.search(var):
1223 1223 del ns[var]
1224 1224
1225 1225 def push(self, variables, interactive=True):
1226 1226 """Inject a group of variables into the IPython user namespace.
1227 1227
1228 1228 Parameters
1229 1229 ----------
1230 1230 variables : dict, str or list/tuple of str
1231 1231 The variables to inject into the user's namespace. If a dict, a
1232 1232 simple update is done. If a str, the string is assumed to have
1233 1233 variable names separated by spaces. A list/tuple of str can also
1234 1234 be used to give the variable names. If just the variable names are
1235 1235 give (list/tuple/str) then the variable values looked up in the
1236 1236 callers frame.
1237 1237 interactive : bool
1238 1238 If True (default), the variables will be listed with the ``who``
1239 1239 magic.
1240 1240 """
1241 1241 vdict = None
1242 1242
1243 1243 # We need a dict of name/value pairs to do namespace updates.
1244 1244 if isinstance(variables, dict):
1245 1245 vdict = variables
1246 1246 elif isinstance(variables, (basestring, list, tuple)):
1247 1247 if isinstance(variables, basestring):
1248 1248 vlist = variables.split()
1249 1249 else:
1250 1250 vlist = variables
1251 1251 vdict = {}
1252 1252 cf = sys._getframe(1)
1253 1253 for name in vlist:
1254 1254 try:
1255 1255 vdict[name] = eval(name, cf.f_globals, cf.f_locals)
1256 1256 except:
1257 1257 print ('Could not get variable %s from %s' %
1258 1258 (name,cf.f_code.co_name))
1259 1259 else:
1260 1260 raise ValueError('variables must be a dict/str/list/tuple')
1261 1261
1262 1262 # Propagate variables to user namespace
1263 1263 self.user_ns.update(vdict)
1264 1264
1265 1265 # And configure interactive visibility
1266 1266 config_ns = self.user_ns_hidden
1267 1267 if interactive:
1268 1268 for name, val in vdict.iteritems():
1269 1269 config_ns.pop(name, None)
1270 1270 else:
1271 1271 for name,val in vdict.iteritems():
1272 1272 config_ns[name] = val
1273 1273
1274 1274 def drop_by_id(self, variables):
1275 1275 """Remove a dict of variables from the user namespace, if they are the
1276 1276 same as the values in the dictionary.
1277 1277
1278 1278 This is intended for use by extensions: variables that they've added can
1279 1279 be taken back out if they are unloaded, without removing any that the
1280 1280 user has overwritten.
1281 1281
1282 1282 Parameters
1283 1283 ----------
1284 1284 variables : dict
1285 1285 A dictionary mapping object names (as strings) to the objects.
1286 1286 """
1287 1287 for name, obj in variables.iteritems():
1288 1288 if name in self.user_ns and self.user_ns[name] is obj:
1289 1289 del self.user_ns[name]
1290 1290 self.user_ns_hidden.pop(name, None)
1291 1291
1292 1292 #-------------------------------------------------------------------------
1293 1293 # Things related to object introspection
1294 1294 #-------------------------------------------------------------------------
1295 1295
1296 1296 def _ofind(self, oname, namespaces=None):
1297 1297 """Find an object in the available namespaces.
1298 1298
1299 1299 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
1300 1300
1301 1301 Has special code to detect magic functions.
1302 1302 """
1303 1303 oname = oname.strip()
1304 1304 #print '1- oname: <%r>' % oname # dbg
1305 1305 if not py3compat.isidentifier(oname.lstrip(ESC_MAGIC), dotted=True):
1306 1306 return dict(found=False)
1307 1307
1308 1308 alias_ns = None
1309 1309 if namespaces is None:
1310 1310 # Namespaces to search in:
1311 1311 # Put them in a list. The order is important so that we
1312 1312 # find things in the same order that Python finds them.
1313 1313 namespaces = [ ('Interactive', self.user_ns),
1314 1314 ('IPython internal', self.internal_ns),
1315 1315 ('Python builtin', builtin_mod.__dict__),
1316 1316 ('Alias', self.alias_manager.alias_table),
1317 1317 ]
1318 1318 alias_ns = self.alias_manager.alias_table
1319 1319
1320 1320 # initialize results to 'null'
1321 1321 found = False; obj = None; ospace = None; ds = None;
1322 1322 ismagic = False; isalias = False; parent = None
1323 1323
1324 1324 # We need to special-case 'print', which as of python2.6 registers as a
1325 1325 # function but should only be treated as one if print_function was
1326 1326 # loaded with a future import. In this case, just bail.
1327 1327 if (oname == 'print' and not py3compat.PY3 and not \
1328 1328 (self.compile.compiler_flags & __future__.CO_FUTURE_PRINT_FUNCTION)):
1329 1329 return {'found':found, 'obj':obj, 'namespace':ospace,
1330 1330 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1331 1331
1332 1332 # Look for the given name by splitting it in parts. If the head is
1333 1333 # found, then we look for all the remaining parts as members, and only
1334 1334 # declare success if we can find them all.
1335 1335 oname_parts = oname.split('.')
1336 1336 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
1337 1337 for nsname,ns in namespaces:
1338 1338 try:
1339 1339 obj = ns[oname_head]
1340 1340 except KeyError:
1341 1341 continue
1342 1342 else:
1343 1343 #print 'oname_rest:', oname_rest # dbg
1344 1344 for part in oname_rest:
1345 1345 try:
1346 1346 parent = obj
1347 1347 obj = getattr(obj,part)
1348 1348 except:
1349 1349 # Blanket except b/c some badly implemented objects
1350 1350 # allow __getattr__ to raise exceptions other than
1351 1351 # AttributeError, which then crashes IPython.
1352 1352 break
1353 1353 else:
1354 1354 # If we finish the for loop (no break), we got all members
1355 1355 found = True
1356 1356 ospace = nsname
1357 1357 if ns == alias_ns:
1358 1358 isalias = True
1359 1359 break # namespace loop
1360 1360
1361 1361 # Try to see if it's magic
1362 1362 if not found:
1363 1363 if oname.startswith(ESC_MAGIC):
1364 1364 oname = oname[1:]
1365 1365 obj = getattr(self,'magic_'+oname,None)
1366 1366 if obj is not None:
1367 1367 found = True
1368 1368 ospace = 'IPython internal'
1369 1369 ismagic = True
1370 1370
1371 1371 # Last try: special-case some literals like '', [], {}, etc:
1372 1372 if not found and oname_head in ["''",'""','[]','{}','()']:
1373 1373 obj = eval(oname_head)
1374 1374 found = True
1375 1375 ospace = 'Interactive'
1376 1376
1377 1377 return {'found':found, 'obj':obj, 'namespace':ospace,
1378 1378 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
1379 1379
1380 1380 def _ofind_property(self, oname, info):
1381 1381 """Second part of object finding, to look for property details."""
1382 1382 if info.found:
1383 1383 # Get the docstring of the class property if it exists.
1384 1384 path = oname.split('.')
1385 1385 root = '.'.join(path[:-1])
1386 1386 if info.parent is not None:
1387 1387 try:
1388 1388 target = getattr(info.parent, '__class__')
1389 1389 # The object belongs to a class instance.
1390 1390 try:
1391 1391 target = getattr(target, path[-1])
1392 1392 # The class defines the object.
1393 1393 if isinstance(target, property):
1394 1394 oname = root + '.__class__.' + path[-1]
1395 1395 info = Struct(self._ofind(oname))
1396 1396 except AttributeError: pass
1397 1397 except AttributeError: pass
1398 1398
1399 1399 # We return either the new info or the unmodified input if the object
1400 1400 # hadn't been found
1401 1401 return info
1402 1402
1403 1403 def _object_find(self, oname, namespaces=None):
1404 1404 """Find an object and return a struct with info about it."""
1405 1405 inf = Struct(self._ofind(oname, namespaces))
1406 1406 return Struct(self._ofind_property(oname, inf))
1407 1407
1408 1408 def _inspect(self, meth, oname, namespaces=None, **kw):
1409 1409 """Generic interface to the inspector system.
1410 1410
1411 1411 This function is meant to be called by pdef, pdoc & friends."""
1412 1412 info = self._object_find(oname)
1413 1413 if info.found:
1414 1414 pmethod = getattr(self.inspector, meth)
1415 1415 formatter = format_screen if info.ismagic else None
1416 1416 if meth == 'pdoc':
1417 1417 pmethod(info.obj, oname, formatter)
1418 1418 elif meth == 'pinfo':
1419 1419 pmethod(info.obj, oname, formatter, info, **kw)
1420 1420 else:
1421 1421 pmethod(info.obj, oname)
1422 1422 else:
1423 1423 print 'Object `%s` not found.' % oname
1424 1424 return 'not found' # so callers can take other action
1425 1425
1426 1426 def object_inspect(self, oname):
1427 1427 with self.builtin_trap:
1428 1428 info = self._object_find(oname)
1429 1429 if info.found:
1430 1430 return self.inspector.info(info.obj, oname, info=info)
1431 1431 else:
1432 1432 return oinspect.object_info(name=oname, found=False)
1433 1433
1434 1434 #-------------------------------------------------------------------------
1435 1435 # Things related to history management
1436 1436 #-------------------------------------------------------------------------
1437 1437
1438 1438 def init_history(self):
1439 1439 """Sets up the command history, and starts regular autosaves."""
1440 1440 self.history_manager = HistoryManager(shell=self, config=self.config)
1441 1441 self.configurables.append(self.history_manager)
1442 1442
1443 1443 #-------------------------------------------------------------------------
1444 1444 # Things related to exception handling and tracebacks (not debugging)
1445 1445 #-------------------------------------------------------------------------
1446 1446
1447 1447 def init_traceback_handlers(self, custom_exceptions):
1448 1448 # Syntax error handler.
1449 1449 self.SyntaxTB = ultratb.SyntaxTB(color_scheme='NoColor')
1450 1450
1451 1451 # The interactive one is initialized with an offset, meaning we always
1452 1452 # want to remove the topmost item in the traceback, which is our own
1453 1453 # internal code. Valid modes: ['Plain','Context','Verbose']
1454 1454 self.InteractiveTB = ultratb.AutoFormattedTB(mode = 'Plain',
1455 1455 color_scheme='NoColor',
1456 1456 tb_offset = 1,
1457 1457 check_cache=self.compile.check_cache)
1458 1458
1459 1459 # The instance will store a pointer to the system-wide exception hook,
1460 1460 # so that runtime code (such as magics) can access it. This is because
1461 1461 # during the read-eval loop, it may get temporarily overwritten.
1462 1462 self.sys_excepthook = sys.excepthook
1463 1463
1464 1464 # and add any custom exception handlers the user may have specified
1465 1465 self.set_custom_exc(*custom_exceptions)
1466 1466
1467 1467 # Set the exception mode
1468 1468 self.InteractiveTB.set_mode(mode=self.xmode)
1469 1469
1470 1470 def set_custom_exc(self, exc_tuple, handler):
1471 1471 """set_custom_exc(exc_tuple,handler)
1472 1472
1473 1473 Set a custom exception handler, which will be called if any of the
1474 1474 exceptions in exc_tuple occur in the mainloop (specifically, in the
1475 1475 run_code() method).
1476 1476
1477 1477 Parameters
1478 1478 ----------
1479 1479
1480 1480 exc_tuple : tuple of exception classes
1481 1481 A *tuple* of exception classes, for which to call the defined
1482 1482 handler. It is very important that you use a tuple, and NOT A
1483 1483 LIST here, because of the way Python's except statement works. If
1484 1484 you only want to trap a single exception, use a singleton tuple::
1485 1485
1486 1486 exc_tuple == (MyCustomException,)
1487 1487
1488 1488 handler : callable
1489 1489 handler must have the following signature::
1490 1490
1491 1491 def my_handler(self, etype, value, tb, tb_offset=None):
1492 1492 ...
1493 1493 return structured_traceback
1494 1494
1495 1495 Your handler must return a structured traceback (a list of strings),
1496 1496 or None.
1497 1497
1498 1498 This will be made into an instance method (via types.MethodType)
1499 1499 of IPython itself, and it will be called if any of the exceptions
1500 1500 listed in the exc_tuple are caught. If the handler is None, an
1501 1501 internal basic one is used, which just prints basic info.
1502 1502
1503 1503 To protect IPython from crashes, if your handler ever raises an
1504 1504 exception or returns an invalid result, it will be immediately
1505 1505 disabled.
1506 1506
1507 1507 WARNING: by putting in your own exception handler into IPython's main
1508 1508 execution loop, you run a very good chance of nasty crashes. This
1509 1509 facility should only be used if you really know what you are doing."""
1510 1510
1511 1511 assert type(exc_tuple)==type(()) , \
1512 1512 "The custom exceptions must be given AS A TUPLE."
1513 1513
1514 1514 def dummy_handler(self,etype,value,tb,tb_offset=None):
1515 1515 print '*** Simple custom exception handler ***'
1516 1516 print 'Exception type :',etype
1517 1517 print 'Exception value:',value
1518 1518 print 'Traceback :',tb
1519 1519 #print 'Source code :','\n'.join(self.buffer)
1520 1520
1521 1521 def validate_stb(stb):
1522 1522 """validate structured traceback return type
1523 1523
1524 1524 return type of CustomTB *should* be a list of strings, but allow
1525 1525 single strings or None, which are harmless.
1526 1526
1527 1527 This function will *always* return a list of strings,
1528 1528 and will raise a TypeError if stb is inappropriate.
1529 1529 """
1530 1530 msg = "CustomTB must return list of strings, not %r" % stb
1531 1531 if stb is None:
1532 1532 return []
1533 1533 elif isinstance(stb, basestring):
1534 1534 return [stb]
1535 1535 elif not isinstance(stb, list):
1536 1536 raise TypeError(msg)
1537 1537 # it's a list
1538 1538 for line in stb:
1539 1539 # check every element
1540 1540 if not isinstance(line, basestring):
1541 1541 raise TypeError(msg)
1542 1542 return stb
1543 1543
1544 1544 if handler is None:
1545 1545 wrapped = dummy_handler
1546 1546 else:
1547 1547 def wrapped(self,etype,value,tb,tb_offset=None):
1548 1548 """wrap CustomTB handler, to protect IPython from user code
1549 1549
1550 1550 This makes it harder (but not impossible) for custom exception
1551 1551 handlers to crash IPython.
1552 1552 """
1553 1553 try:
1554 1554 stb = handler(self,etype,value,tb,tb_offset=tb_offset)
1555 1555 return validate_stb(stb)
1556 1556 except:
1557 1557 # clear custom handler immediately
1558 1558 self.set_custom_exc((), None)
1559 1559 print >> io.stderr, "Custom TB Handler failed, unregistering"
1560 1560 # show the exception in handler first
1561 1561 stb = self.InteractiveTB.structured_traceback(*sys.exc_info())
1562 1562 print >> io.stdout, self.InteractiveTB.stb2text(stb)
1563 1563 print >> io.stdout, "The original exception:"
1564 1564 stb = self.InteractiveTB.structured_traceback(
1565 1565 (etype,value,tb), tb_offset=tb_offset
1566 1566 )
1567 1567 return stb
1568 1568
1569 1569 self.CustomTB = types.MethodType(wrapped,self)
1570 1570 self.custom_exceptions = exc_tuple
1571 1571
1572 1572 def excepthook(self, etype, value, tb):
1573 1573 """One more defense for GUI apps that call sys.excepthook.
1574 1574
1575 1575 GUI frameworks like wxPython trap exceptions and call
1576 1576 sys.excepthook themselves. I guess this is a feature that
1577 1577 enables them to keep running after exceptions that would
1578 1578 otherwise kill their mainloop. This is a bother for IPython
1579 1579 which excepts to catch all of the program exceptions with a try:
1580 1580 except: statement.
1581 1581
1582 1582 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1583 1583 any app directly invokes sys.excepthook, it will look to the user like
1584 1584 IPython crashed. In order to work around this, we can disable the
1585 1585 CrashHandler and replace it with this excepthook instead, which prints a
1586 1586 regular traceback using our InteractiveTB. In this fashion, apps which
1587 1587 call sys.excepthook will generate a regular-looking exception from
1588 1588 IPython, and the CrashHandler will only be triggered by real IPython
1589 1589 crashes.
1590 1590
1591 1591 This hook should be used sparingly, only in places which are not likely
1592 1592 to be true IPython errors.
1593 1593 """
1594 1594 self.showtraceback((etype,value,tb),tb_offset=0)
1595 1595
1596 1596 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None,
1597 1597 exception_only=False):
1598 1598 """Display the exception that just occurred.
1599 1599
1600 1600 If nothing is known about the exception, this is the method which
1601 1601 should be used throughout the code for presenting user tracebacks,
1602 1602 rather than directly invoking the InteractiveTB object.
1603 1603
1604 1604 A specific showsyntaxerror() also exists, but this method can take
1605 1605 care of calling it if needed, so unless you are explicitly catching a
1606 1606 SyntaxError exception, don't try to analyze the stack manually and
1607 1607 simply call this method."""
1608 1608
1609 1609 try:
1610 1610 if exc_tuple is None:
1611 1611 etype, value, tb = sys.exc_info()
1612 1612 else:
1613 1613 etype, value, tb = exc_tuple
1614 1614
1615 1615 if etype is None:
1616 1616 if hasattr(sys, 'last_type'):
1617 1617 etype, value, tb = sys.last_type, sys.last_value, \
1618 1618 sys.last_traceback
1619 1619 else:
1620 1620 self.write_err('No traceback available to show.\n')
1621 1621 return
1622 1622
1623 1623 if etype is SyntaxError:
1624 1624 # Though this won't be called by syntax errors in the input
1625 1625 # line, there may be SyntaxError cases with imported code.
1626 1626 self.showsyntaxerror(filename)
1627 1627 elif etype is UsageError:
1628 1628 self.write_err("UsageError: %s" % value)
1629 1629 else:
1630 1630 # WARNING: these variables are somewhat deprecated and not
1631 1631 # necessarily safe to use in a threaded environment, but tools
1632 1632 # like pdb depend on their existence, so let's set them. If we
1633 1633 # find problems in the field, we'll need to revisit their use.
1634 1634 sys.last_type = etype
1635 1635 sys.last_value = value
1636 1636 sys.last_traceback = tb
1637 1637 if etype in self.custom_exceptions:
1638 1638 stb = self.CustomTB(etype, value, tb, tb_offset)
1639 1639 else:
1640 1640 if exception_only:
1641 1641 stb = ['An exception has occurred, use %tb to see '
1642 1642 'the full traceback.\n']
1643 1643 stb.extend(self.InteractiveTB.get_exception_only(etype,
1644 1644 value))
1645 1645 else:
1646 1646 stb = self.InteractiveTB.structured_traceback(etype,
1647 1647 value, tb, tb_offset=tb_offset)
1648 1648
1649 1649 self._showtraceback(etype, value, stb)
1650 1650 if self.call_pdb:
1651 1651 # drop into debugger
1652 1652 self.debugger(force=True)
1653 1653 return
1654 1654
1655 1655 # Actually show the traceback
1656 1656 self._showtraceback(etype, value, stb)
1657 1657
1658 1658 except KeyboardInterrupt:
1659 1659 self.write_err("\nKeyboardInterrupt\n")
1660 1660
1661 1661 def _showtraceback(self, etype, evalue, stb):
1662 1662 """Actually show a traceback.
1663 1663
1664 1664 Subclasses may override this method to put the traceback on a different
1665 1665 place, like a side channel.
1666 1666 """
1667 1667 print >> io.stdout, self.InteractiveTB.stb2text(stb)
1668 1668
1669 1669 def showsyntaxerror(self, filename=None):
1670 1670 """Display the syntax error that just occurred.
1671 1671
1672 1672 This doesn't display a stack trace because there isn't one.
1673 1673
1674 1674 If a filename is given, it is stuffed in the exception instead
1675 1675 of what was there before (because Python's parser always uses
1676 1676 "<string>" when reading from a string).
1677 1677 """
1678 1678 etype, value, last_traceback = sys.exc_info()
1679 1679
1680 1680 # See note about these variables in showtraceback() above
1681 1681 sys.last_type = etype
1682 1682 sys.last_value = value
1683 1683 sys.last_traceback = last_traceback
1684 1684
1685 1685 if filename and etype is SyntaxError:
1686 1686 # Work hard to stuff the correct filename in the exception
1687 1687 try:
1688 1688 msg, (dummy_filename, lineno, offset, line) = value
1689 1689 except:
1690 1690 # Not the format we expect; leave it alone
1691 1691 pass
1692 1692 else:
1693 1693 # Stuff in the right filename
1694 1694 try:
1695 1695 # Assume SyntaxError is a class exception
1696 1696 value = SyntaxError(msg, (filename, lineno, offset, line))
1697 1697 except:
1698 1698 # If that failed, assume SyntaxError is a string
1699 1699 value = msg, (filename, lineno, offset, line)
1700 1700 stb = self.SyntaxTB.structured_traceback(etype, value, [])
1701 1701 self._showtraceback(etype, value, stb)
1702 1702
1703 1703 # This is overridden in TerminalInteractiveShell to show a message about
1704 1704 # the %paste magic.
1705 1705 def showindentationerror(self):
1706 1706 """Called by run_cell when there's an IndentationError in code entered
1707 1707 at the prompt.
1708 1708
1709 1709 This is overridden in TerminalInteractiveShell to show a message about
1710 1710 the %paste magic."""
1711 1711 self.showsyntaxerror()
1712 1712
1713 1713 #-------------------------------------------------------------------------
1714 1714 # Things related to readline
1715 1715 #-------------------------------------------------------------------------
1716 1716
1717 1717 def init_readline(self):
1718 1718 """Command history completion/saving/reloading."""
1719 1719
1720 1720 if self.readline_use:
1721 1721 import IPython.utils.rlineimpl as readline
1722 1722
1723 1723 self.rl_next_input = None
1724 1724 self.rl_do_indent = False
1725 1725
1726 1726 if not self.readline_use or not readline.have_readline:
1727 1727 self.has_readline = False
1728 1728 self.readline = None
1729 1729 # Set a number of methods that depend on readline to be no-op
1730 1730 self.readline_no_record = no_op_context
1731 1731 self.set_readline_completer = no_op
1732 1732 self.set_custom_completer = no_op
1733 1733 self.set_completer_frame = no_op
1734 1734 if self.readline_use:
1735 1735 warn('Readline services not available or not loaded.')
1736 1736 else:
1737 1737 self.has_readline = True
1738 1738 self.readline = readline
1739 1739 sys.modules['readline'] = readline
1740 1740
1741 1741 # Platform-specific configuration
1742 1742 if os.name == 'nt':
1743 1743 # FIXME - check with Frederick to see if we can harmonize
1744 1744 # naming conventions with pyreadline to avoid this
1745 1745 # platform-dependent check
1746 1746 self.readline_startup_hook = readline.set_pre_input_hook
1747 1747 else:
1748 1748 self.readline_startup_hook = readline.set_startup_hook
1749 1749
1750 1750 # Load user's initrc file (readline config)
1751 1751 # Or if libedit is used, load editrc.
1752 1752 inputrc_name = os.environ.get('INPUTRC')
1753 1753 if inputrc_name is None:
1754 1754 home_dir = get_home_dir()
1755 1755 if home_dir is not None:
1756 1756 inputrc_name = '.inputrc'
1757 1757 if readline.uses_libedit:
1758 1758 inputrc_name = '.editrc'
1759 1759 inputrc_name = os.path.join(home_dir, inputrc_name)
1760 1760 if os.path.isfile(inputrc_name):
1761 1761 try:
1762 1762 readline.read_init_file(inputrc_name)
1763 1763 except:
1764 1764 warn('Problems reading readline initialization file <%s>'
1765 1765 % inputrc_name)
1766 1766
1767 1767 # Configure readline according to user's prefs
1768 1768 # This is only done if GNU readline is being used. If libedit
1769 1769 # is being used (as on Leopard) the readline config is
1770 1770 # not run as the syntax for libedit is different.
1771 1771 if not readline.uses_libedit:
1772 1772 for rlcommand in self.readline_parse_and_bind:
1773 1773 #print "loading rl:",rlcommand # dbg
1774 1774 readline.parse_and_bind(rlcommand)
1775 1775
1776 1776 # Remove some chars from the delimiters list. If we encounter
1777 1777 # unicode chars, discard them.
1778 1778 delims = readline.get_completer_delims()
1779 1779 if not py3compat.PY3:
1780 1780 delims = delims.encode("ascii", "ignore")
1781 1781 for d in self.readline_remove_delims:
1782 1782 delims = delims.replace(d, "")
1783 1783 delims = delims.replace(ESC_MAGIC, '')
1784 1784 readline.set_completer_delims(delims)
1785 1785 # otherwise we end up with a monster history after a while:
1786 1786 readline.set_history_length(self.history_length)
1787 1787
1788 1788 self.refill_readline_hist()
1789 1789 self.readline_no_record = ReadlineNoRecord(self)
1790 1790
1791 1791 # Configure auto-indent for all platforms
1792 1792 self.set_autoindent(self.autoindent)
1793 1793
1794 1794 def refill_readline_hist(self):
1795 1795 # Load the last 1000 lines from history
1796 1796 self.readline.clear_history()
1797 1797 stdin_encoding = sys.stdin.encoding or "utf-8"
1798 1798 last_cell = u""
1799 1799 for _, _, cell in self.history_manager.get_tail(1000,
1800 1800 include_latest=True):
1801 1801 # Ignore blank lines and consecutive duplicates
1802 1802 cell = cell.rstrip()
1803 1803 if cell and (cell != last_cell):
1804 1804 if self.multiline_history:
1805 1805 self.readline.add_history(py3compat.unicode_to_str(cell,
1806 1806 stdin_encoding))
1807 1807 else:
1808 1808 for line in cell.splitlines():
1809 1809 self.readline.add_history(py3compat.unicode_to_str(line,
1810 1810 stdin_encoding))
1811 1811 last_cell = cell
1812 1812
1813 1813 def set_next_input(self, s):
1814 1814 """ Sets the 'default' input string for the next command line.
1815 1815
1816 1816 Requires readline.
1817 1817
1818 1818 Example:
1819 1819
1820 1820 [D:\ipython]|1> _ip.set_next_input("Hello Word")
1821 1821 [D:\ipython]|2> Hello Word_ # cursor is here
1822 1822 """
1823 1823 self.rl_next_input = py3compat.cast_bytes_py2(s)
1824 1824
1825 1825 # Maybe move this to the terminal subclass?
1826 1826 def pre_readline(self):
1827 1827 """readline hook to be used at the start of each line.
1828 1828
1829 1829 Currently it handles auto-indent only."""
1830 1830
1831 1831 if self.rl_do_indent:
1832 1832 self.readline.insert_text(self._indent_current_str())
1833 1833 if self.rl_next_input is not None:
1834 1834 self.readline.insert_text(self.rl_next_input)
1835 1835 self.rl_next_input = None
1836 1836
1837 1837 def _indent_current_str(self):
1838 1838 """return the current level of indentation as a string"""
1839 1839 return self.input_splitter.indent_spaces * ' '
1840 1840
1841 1841 #-------------------------------------------------------------------------
1842 1842 # Things related to text completion
1843 1843 #-------------------------------------------------------------------------
1844 1844
1845 1845 def init_completer(self):
1846 1846 """Initialize the completion machinery.
1847 1847
1848 1848 This creates completion machinery that can be used by client code,
1849 1849 either interactively in-process (typically triggered by the readline
1850 1850 library), programatically (such as in test suites) or out-of-prcess
1851 1851 (typically over the network by remote frontends).
1852 1852 """
1853 1853 from IPython.core.completer import IPCompleter
1854 1854 from IPython.core.completerlib import (module_completer,
1855 1855 magic_run_completer, cd_completer)
1856 1856
1857 1857 self.Completer = IPCompleter(shell=self,
1858 1858 namespace=self.user_ns,
1859 1859 global_namespace=self.user_global_ns,
1860 1860 alias_table=self.alias_manager.alias_table,
1861 1861 use_readline=self.has_readline,
1862 1862 config=self.config,
1863 1863 )
1864 1864 self.configurables.append(self.Completer)
1865 1865
1866 1866 # Add custom completers to the basic ones built into IPCompleter
1867 1867 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1868 1868 self.strdispatchers['complete_command'] = sdisp
1869 1869 self.Completer.custom_completers = sdisp
1870 1870
1871 1871 self.set_hook('complete_command', module_completer, str_key = 'import')
1872 1872 self.set_hook('complete_command', module_completer, str_key = 'from')
1873 1873 self.set_hook('complete_command', magic_run_completer, str_key = '%run')
1874 1874 self.set_hook('complete_command', cd_completer, str_key = '%cd')
1875 1875
1876 1876 # Only configure readline if we truly are using readline. IPython can
1877 1877 # do tab-completion over the network, in GUIs, etc, where readline
1878 1878 # itself may be absent
1879 1879 if self.has_readline:
1880 1880 self.set_readline_completer()
1881 1881
1882 1882 def complete(self, text, line=None, cursor_pos=None):
1883 1883 """Return the completed text and a list of completions.
1884 1884
1885 1885 Parameters
1886 1886 ----------
1887 1887
1888 1888 text : string
1889 1889 A string of text to be completed on. It can be given as empty and
1890 1890 instead a line/position pair are given. In this case, the
1891 1891 completer itself will split the line like readline does.
1892 1892
1893 1893 line : string, optional
1894 1894 The complete line that text is part of.
1895 1895
1896 1896 cursor_pos : int, optional
1897 1897 The position of the cursor on the input line.
1898 1898
1899 1899 Returns
1900 1900 -------
1901 1901 text : string
1902 1902 The actual text that was completed.
1903 1903
1904 1904 matches : list
1905 1905 A sorted list with all possible completions.
1906 1906
1907 1907 The optional arguments allow the completion to take more context into
1908 1908 account, and are part of the low-level completion API.
1909 1909
1910 1910 This is a wrapper around the completion mechanism, similar to what
1911 1911 readline does at the command line when the TAB key is hit. By
1912 1912 exposing it as a method, it can be used by other non-readline
1913 1913 environments (such as GUIs) for text completion.
1914 1914
1915 1915 Simple usage example:
1916 1916
1917 1917 In [1]: x = 'hello'
1918 1918
1919 1919 In [2]: _ip.complete('x.l')
1920 1920 Out[2]: ('x.l', ['x.ljust', 'x.lower', 'x.lstrip'])
1921 1921 """
1922 1922
1923 1923 # Inject names into __builtin__ so we can complete on the added names.
1924 1924 with self.builtin_trap:
1925 1925 return self.Completer.complete(text, line, cursor_pos)
1926 1926
1927 1927 def set_custom_completer(self, completer, pos=0):
1928 1928 """Adds a new custom completer function.
1929 1929
1930 1930 The position argument (defaults to 0) is the index in the completers
1931 1931 list where you want the completer to be inserted."""
1932 1932
1933 1933 newcomp = types.MethodType(completer,self.Completer)
1934 1934 self.Completer.matchers.insert(pos,newcomp)
1935 1935
1936 1936 def set_readline_completer(self):
1937 1937 """Reset readline's completer to be our own."""
1938 1938 self.readline.set_completer(self.Completer.rlcomplete)
1939 1939
1940 1940 def set_completer_frame(self, frame=None):
1941 1941 """Set the frame of the completer."""
1942 1942 if frame:
1943 1943 self.Completer.namespace = frame.f_locals
1944 1944 self.Completer.global_namespace = frame.f_globals
1945 1945 else:
1946 1946 self.Completer.namespace = self.user_ns
1947 1947 self.Completer.global_namespace = self.user_global_ns
1948 1948
1949 1949 #-------------------------------------------------------------------------
1950 1950 # Things related to magics
1951 1951 #-------------------------------------------------------------------------
1952 1952
1953 1953 def init_magics(self):
1954 1954 # FIXME: Move the color initialization to the DisplayHook, which
1955 1955 # should be split into a prompt manager and displayhook. We probably
1956 1956 # even need a centralize colors management object.
1957 1957 self.magic_colors(self.colors)
1958 1958 # History was moved to a separate module
1959 1959 from . import history
1960 1960 history.init_ipython(self)
1961 1961
1962 1962 def magic(self, arg_s, next_input=None):
1963 1963 """Call a magic function by name.
1964 1964
1965 1965 Input: a string containing the name of the magic function to call and
1966 1966 any additional arguments to be passed to the magic.
1967 1967
1968 1968 magic('name -opt foo bar') is equivalent to typing at the ipython
1969 1969 prompt:
1970 1970
1971 1971 In[1]: %name -opt foo bar
1972 1972
1973 1973 To call a magic without arguments, simply use magic('name').
1974 1974
1975 1975 This provides a proper Python function to call IPython's magics in any
1976 1976 valid Python code you can type at the interpreter, including loops and
1977 1977 compound statements.
1978 1978 """
1979 1979 # Allow setting the next input - this is used if the user does `a=abs?`.
1980 1980 # We do this first so that magic functions can override it.
1981 1981 if next_input:
1982 1982 self.set_next_input(next_input)
1983 1983
1984 1984 args = arg_s.split(' ',1)
1985 1985 magic_name = args[0]
1986 1986 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
1987 1987
1988 1988 try:
1989 1989 magic_args = args[1]
1990 1990 except IndexError:
1991 1991 magic_args = ''
1992 1992 fn = getattr(self,'magic_'+magic_name,None)
1993 1993 if fn is None:
1994 1994 error("Magic function `%s` not found." % magic_name)
1995 1995 else:
1996 1996 magic_args = self.var_expand(magic_args,1)
1997 1997 # Grab local namespace if we need it:
1998 1998 if getattr(fn, "needs_local_scope", False):
1999 1999 self._magic_locals = sys._getframe(1).f_locals
2000 2000 with self.builtin_trap:
2001 2001 result = fn(magic_args)
2002 2002 # Ensure we're not keeping object references around:
2003 2003 self._magic_locals = {}
2004 2004 return result
2005 2005
2006 2006 def define_magic(self, magicname, func):
2007 2007 """Expose own function as magic function for ipython
2008 2008
2009 2009 def foo_impl(self,parameter_s=''):
2010 2010 'My very own magic!. (Use docstrings, IPython reads them).'
2011 2011 print 'Magic function. Passed parameter is between < >:'
2012 2012 print '<%s>' % parameter_s
2013 2013 print 'The self object is:',self
2014 2014
2015 2015 self.define_magic('foo',foo_impl)
2016 2016 """
2017 2017 im = types.MethodType(func,self)
2018 2018 old = getattr(self, "magic_" + magicname, None)
2019 2019 setattr(self, "magic_" + magicname, im)
2020 2020 return old
2021 2021
2022 2022 #-------------------------------------------------------------------------
2023 2023 # Things related to macros
2024 2024 #-------------------------------------------------------------------------
2025 2025
2026 2026 def define_macro(self, name, themacro):
2027 2027 """Define a new macro
2028 2028
2029 2029 Parameters
2030 2030 ----------
2031 2031 name : str
2032 2032 The name of the macro.
2033 2033 themacro : str or Macro
2034 2034 The action to do upon invoking the macro. If a string, a new
2035 2035 Macro object is created by passing the string to it.
2036 2036 """
2037 2037
2038 2038 from IPython.core import macro
2039 2039
2040 2040 if isinstance(themacro, basestring):
2041 2041 themacro = macro.Macro(themacro)
2042 2042 if not isinstance(themacro, macro.Macro):
2043 2043 raise ValueError('A macro must be a string or a Macro instance.')
2044 2044 self.user_ns[name] = themacro
2045 2045
2046 2046 #-------------------------------------------------------------------------
2047 2047 # Things related to the running of system commands
2048 2048 #-------------------------------------------------------------------------
2049 2049
2050 2050 def system_piped(self, cmd):
2051 2051 """Call the given cmd in a subprocess, piping stdout/err
2052 2052
2053 2053 Parameters
2054 2054 ----------
2055 2055 cmd : str
2056 2056 Command to execute (can not end in '&', as background processes are
2057 2057 not supported. Should not be a command that expects input
2058 2058 other than simple text.
2059 2059 """
2060 2060 if cmd.rstrip().endswith('&'):
2061 2061 # this is *far* from a rigorous test
2062 2062 # We do not support backgrounding processes because we either use
2063 2063 # pexpect or pipes to read from. Users can always just call
2064 2064 # os.system() or use ip.system=ip.system_raw
2065 2065 # if they really want a background process.
2066 2066 raise OSError("Background processes not supported.")
2067 2067
2068 2068 # we explicitly do NOT return the subprocess status code, because
2069 2069 # a non-None value would trigger :func:`sys.displayhook` calls.
2070 2070 # Instead, we store the exit_code in user_ns.
2071 2071 self.user_ns['_exit_code'] = system(self.var_expand(cmd, depth=2))
2072 2072
2073 2073 def system_raw(self, cmd):
2074 2074 """Call the given cmd in a subprocess using os.system
2075 2075
2076 2076 Parameters
2077 2077 ----------
2078 2078 cmd : str
2079 2079 Command to execute.
2080 2080 """
2081 2081 cmd = self.var_expand(cmd, depth=2)
2082 2082 # protect os.system from UNC paths on Windows, which it can't handle:
2083 2083 if sys.platform == 'win32':
2084 2084 from IPython.utils._process_win32 import AvoidUNCPath
2085 2085 with AvoidUNCPath() as path:
2086 2086 if path is not None:
2087 2087 cmd = '"pushd %s &&"%s' % (path, cmd)
2088 2088 cmd = py3compat.unicode_to_str(cmd)
2089 2089 ec = os.system(cmd)
2090 2090 else:
2091 2091 cmd = py3compat.unicode_to_str(cmd)
2092 2092 ec = os.system(cmd)
2093 2093
2094 2094 # We explicitly do NOT return the subprocess status code, because
2095 2095 # a non-None value would trigger :func:`sys.displayhook` calls.
2096 2096 # Instead, we store the exit_code in user_ns.
2097 2097 self.user_ns['_exit_code'] = ec
2098 2098
2099 2099 # use piped system by default, because it is better behaved
2100 2100 system = system_piped
2101 2101
2102 2102 def getoutput(self, cmd, split=True):
2103 2103 """Get output (possibly including stderr) from a subprocess.
2104 2104
2105 2105 Parameters
2106 2106 ----------
2107 2107 cmd : str
2108 2108 Command to execute (can not end in '&', as background processes are
2109 2109 not supported.
2110 2110 split : bool, optional
2111 2111
2112 2112 If True, split the output into an IPython SList. Otherwise, an
2113 2113 IPython LSString is returned. These are objects similar to normal
2114 2114 lists and strings, with a few convenience attributes for easier
2115 2115 manipulation of line-based output. You can use '?' on them for
2116 2116 details.
2117 2117 """
2118 2118 if cmd.rstrip().endswith('&'):
2119 2119 # this is *far* from a rigorous test
2120 2120 raise OSError("Background processes not supported.")
2121 2121 out = getoutput(self.var_expand(cmd, depth=2))
2122 2122 if split:
2123 2123 out = SList(out.splitlines())
2124 2124 else:
2125 2125 out = LSString(out)
2126 2126 return out
2127 2127
2128 2128 #-------------------------------------------------------------------------
2129 2129 # Things related to aliases
2130 2130 #-------------------------------------------------------------------------
2131 2131
2132 2132 def init_alias(self):
2133 2133 self.alias_manager = AliasManager(shell=self, config=self.config)
2134 2134 self.configurables.append(self.alias_manager)
2135 2135 self.ns_table['alias'] = self.alias_manager.alias_table,
2136 2136
2137 2137 #-------------------------------------------------------------------------
2138 2138 # Things related to extensions and plugins
2139 2139 #-------------------------------------------------------------------------
2140 2140
2141 2141 def init_extension_manager(self):
2142 2142 self.extension_manager = ExtensionManager(shell=self, config=self.config)
2143 2143 self.configurables.append(self.extension_manager)
2144 2144
2145 2145 def init_plugin_manager(self):
2146 2146 self.plugin_manager = PluginManager(config=self.config)
2147 2147 self.configurables.append(self.plugin_manager)
2148 2148
2149 2149
2150 2150 #-------------------------------------------------------------------------
2151 2151 # Things related to payloads
2152 2152 #-------------------------------------------------------------------------
2153 2153
2154 2154 def init_payload(self):
2155 2155 self.payload_manager = PayloadManager(config=self.config)
2156 2156 self.configurables.append(self.payload_manager)
2157 2157
2158 2158 #-------------------------------------------------------------------------
2159 2159 # Things related to the prefilter
2160 2160 #-------------------------------------------------------------------------
2161 2161
2162 2162 def init_prefilter(self):
2163 2163 self.prefilter_manager = PrefilterManager(shell=self, config=self.config)
2164 2164 self.configurables.append(self.prefilter_manager)
2165 2165 # Ultimately this will be refactored in the new interpreter code, but
2166 2166 # for now, we should expose the main prefilter method (there's legacy
2167 2167 # code out there that may rely on this).
2168 2168 self.prefilter = self.prefilter_manager.prefilter_lines
2169 2169
2170 2170 def auto_rewrite_input(self, cmd):
2171 2171 """Print to the screen the rewritten form of the user's command.
2172 2172
2173 2173 This shows visual feedback by rewriting input lines that cause
2174 2174 automatic calling to kick in, like::
2175 2175
2176 2176 /f x
2177 2177
2178 2178 into::
2179 2179
2180 2180 ------> f(x)
2181 2181
2182 2182 after the user's input prompt. This helps the user understand that the
2183 2183 input line was transformed automatically by IPython.
2184 2184 """
2185 2185 rw = self.displayhook.prompt1.auto_rewrite() + cmd
2186 2186
2187 2187 try:
2188 2188 # plain ascii works better w/ pyreadline, on some machines, so
2189 2189 # we use it and only print uncolored rewrite if we have unicode
2190 2190 rw = str(rw)
2191 2191 print >> io.stdout, rw
2192 2192 except UnicodeEncodeError:
2193 2193 print "------> " + cmd
2194 2194
2195 2195 #-------------------------------------------------------------------------
2196 2196 # Things related to extracting values/expressions from kernel and user_ns
2197 2197 #-------------------------------------------------------------------------
2198 2198
2199 2199 def _simple_error(self):
2200 2200 etype, value = sys.exc_info()[:2]
2201 2201 return u'[ERROR] {e.__name__}: {v}'.format(e=etype, v=value)
2202 2202
2203 2203 def user_variables(self, names):
2204 2204 """Get a list of variable names from the user's namespace.
2205 2205
2206 2206 Parameters
2207 2207 ----------
2208 2208 names : list of strings
2209 2209 A list of names of variables to be read from the user namespace.
2210 2210
2211 2211 Returns
2212 2212 -------
2213 2213 A dict, keyed by the input names and with the repr() of each value.
2214 2214 """
2215 2215 out = {}
2216 2216 user_ns = self.user_ns
2217 2217 for varname in names:
2218 2218 try:
2219 2219 value = repr(user_ns[varname])
2220 2220 except:
2221 2221 value = self._simple_error()
2222 2222 out[varname] = value
2223 2223 return out
2224 2224
2225 2225 def user_expressions(self, expressions):
2226 2226 """Evaluate a dict of expressions in the user's namespace.
2227 2227
2228 2228 Parameters
2229 2229 ----------
2230 2230 expressions : dict
2231 2231 A dict with string keys and string values. The expression values
2232 2232 should be valid Python expressions, each of which will be evaluated
2233 2233 in the user namespace.
2234 2234
2235 2235 Returns
2236 2236 -------
2237 2237 A dict, keyed like the input expressions dict, with the repr() of each
2238 2238 value.
2239 2239 """
2240 2240 out = {}
2241 2241 user_ns = self.user_ns
2242 2242 global_ns = self.user_global_ns
2243 2243 for key, expr in expressions.iteritems():
2244 2244 try:
2245 2245 value = repr(eval(expr, global_ns, user_ns))
2246 2246 except:
2247 2247 value = self._simple_error()
2248 2248 out[key] = value
2249 2249 return out
2250 2250
2251 2251 #-------------------------------------------------------------------------
2252 2252 # Things related to the running of code
2253 2253 #-------------------------------------------------------------------------
2254 2254
2255 2255 def ex(self, cmd):
2256 2256 """Execute a normal python statement in user namespace."""
2257 2257 with self.builtin_trap:
2258 2258 exec cmd in self.user_global_ns, self.user_ns
2259 2259
2260 2260 def ev(self, expr):
2261 2261 """Evaluate python expression expr in user namespace.
2262 2262
2263 2263 Returns the result of evaluation
2264 2264 """
2265 2265 with self.builtin_trap:
2266 2266 return eval(expr, self.user_global_ns, self.user_ns)
2267 2267
2268 2268 def safe_execfile(self, fname, *where, **kw):
2269 2269 """A safe version of the builtin execfile().
2270 2270
2271 2271 This version will never throw an exception, but instead print
2272 2272 helpful error messages to the screen. This only works on pure
2273 2273 Python files with the .py extension.
2274 2274
2275 2275 Parameters
2276 2276 ----------
2277 2277 fname : string
2278 2278 The name of the file to be executed.
2279 2279 where : tuple
2280 2280 One or two namespaces, passed to execfile() as (globals,locals).
2281 2281 If only one is given, it is passed as both.
2282 2282 exit_ignore : bool (False)
2283 2283 If True, then silence SystemExit for non-zero status (it is always
2284 2284 silenced for zero status, as it is so common).
2285 2285 raise_exceptions : bool (False)
2286 2286 If True raise exceptions everywhere. Meant for testing.
2287 2287
2288 2288 """
2289 2289 kw.setdefault('exit_ignore', False)
2290 2290 kw.setdefault('raise_exceptions', False)
2291 2291
2292 2292 fname = os.path.abspath(os.path.expanduser(fname))
2293 2293
2294 2294 # Make sure we can open the file
2295 2295 try:
2296 2296 with open(fname) as thefile:
2297 2297 pass
2298 2298 except:
2299 2299 warn('Could not open file <%s> for safe execution.' % fname)
2300 2300 return
2301 2301
2302 2302 # Find things also in current directory. This is needed to mimic the
2303 2303 # behavior of running a script from the system command line, where
2304 2304 # Python inserts the script's directory into sys.path
2305 2305 dname = os.path.dirname(fname)
2306 2306
2307 2307 with prepended_to_syspath(dname):
2308 2308 try:
2309 2309 py3compat.execfile(fname,*where)
2310 2310 except SystemExit, status:
2311 2311 # If the call was made with 0 or None exit status (sys.exit(0)
2312 2312 # or sys.exit() ), don't bother showing a traceback, as both of
2313 2313 # these are considered normal by the OS:
2314 2314 # > python -c'import sys;sys.exit(0)'; echo $?
2315 2315 # 0
2316 2316 # > python -c'import sys;sys.exit()'; echo $?
2317 2317 # 0
2318 2318 # For other exit status, we show the exception unless
2319 2319 # explicitly silenced, but only in short form.
2320 2320 if kw['raise_exceptions']:
2321 2321 raise
2322 2322 if status.code not in (0, None) and not kw['exit_ignore']:
2323 2323 self.showtraceback(exception_only=True)
2324 2324 except:
2325 2325 if kw['raise_exceptions']:
2326 2326 raise
2327 2327 self.showtraceback()
2328 2328
2329 2329 def safe_execfile_ipy(self, fname):
2330 2330 """Like safe_execfile, but for .ipy files with IPython syntax.
2331 2331
2332 2332 Parameters
2333 2333 ----------
2334 2334 fname : str
2335 2335 The name of the file to execute. The filename must have a
2336 2336 .ipy extension.
2337 2337 """
2338 2338 fname = os.path.abspath(os.path.expanduser(fname))
2339 2339
2340 2340 # Make sure we can open the file
2341 2341 try:
2342 2342 with open(fname) as thefile:
2343 2343 pass
2344 2344 except:
2345 2345 warn('Could not open file <%s> for safe execution.' % fname)
2346 2346 return
2347 2347
2348 2348 # Find things also in current directory. This is needed to mimic the
2349 2349 # behavior of running a script from the system command line, where
2350 2350 # Python inserts the script's directory into sys.path
2351 2351 dname = os.path.dirname(fname)
2352 2352
2353 2353 with prepended_to_syspath(dname):
2354 2354 try:
2355 2355 with open(fname) as thefile:
2356 2356 # self.run_cell currently captures all exceptions
2357 2357 # raised in user code. It would be nice if there were
2358 2358 # versions of runlines, execfile that did raise, so
2359 2359 # we could catch the errors.
2360 2360 self.run_cell(thefile.read(), store_history=False)
2361 2361 except:
2362 2362 self.showtraceback()
2363 2363 warn('Unknown failure executing file: <%s>' % fname)
2364 2364
2365 2365 def run_cell(self, raw_cell, store_history=False):
2366 2366 """Run a complete IPython cell.
2367 2367
2368 2368 Parameters
2369 2369 ----------
2370 2370 raw_cell : str
2371 2371 The code (including IPython code such as %magic functions) to run.
2372 2372 store_history : bool
2373 2373 If True, the raw and translated cell will be stored in IPython's
2374 2374 history. For user code calling back into IPython's machinery, this
2375 2375 should be set to False.
2376 2376 """
2377 2377 if (not raw_cell) or raw_cell.isspace():
2378 2378 return
2379 2379
2380 2380 for line in raw_cell.splitlines():
2381 2381 self.input_splitter.push(line)
2382 2382 cell = self.input_splitter.source_reset()
2383 2383
2384 2384 with self.builtin_trap:
2385 2385 prefilter_failed = False
2386 2386 if len(cell.splitlines()) == 1:
2387 2387 try:
2388 2388 # use prefilter_lines to handle trailing newlines
2389 2389 # restore trailing newline for ast.parse
2390 2390 cell = self.prefilter_manager.prefilter_lines(cell) + '\n'
2391 2391 except AliasError as e:
2392 2392 error(e)
2393 2393 prefilter_failed = True
2394 2394 except Exception:
2395 2395 # don't allow prefilter errors to crash IPython
2396 2396 self.showtraceback()
2397 2397 prefilter_failed = True
2398 2398
2399 2399 # Store raw and processed history
2400 2400 if store_history:
2401 2401 self.history_manager.store_inputs(self.execution_count,
2402 2402 cell, raw_cell)
2403 2403
2404 2404 self.logger.log(cell, raw_cell)
2405 2405
2406 2406 if not prefilter_failed:
2407 2407 # don't run if prefilter failed
2408 2408 cell_name = self.compile.cache(cell, self.execution_count)
2409 2409
2410 2410 with self.display_trap:
2411 2411 try:
2412 2412 code_ast = self.compile.ast_parse(cell, filename=cell_name)
2413 2413 except IndentationError:
2414 2414 self.showindentationerror()
2415 2415 self.execution_count += 1
2416 2416 return None
2417 2417 except (OverflowError, SyntaxError, ValueError, TypeError,
2418 2418 MemoryError):
2419 2419 self.showsyntaxerror()
2420 2420 self.execution_count += 1
2421 2421 return None
2422 2422
2423 2423 self.run_ast_nodes(code_ast.body, cell_name,
2424 2424 interactivity="last_expr")
2425 2425
2426 2426 # Execute any registered post-execution functions.
2427 2427 for func, status in self._post_execute.iteritems():
2428 2428 if not status:
2429 2429 continue
2430 2430 try:
2431 2431 func()
2432 2432 except KeyboardInterrupt:
2433 2433 print >> io.stderr, "\nKeyboardInterrupt"
2434 2434 except Exception:
2435 2435 print >> io.stderr, "Disabling failed post-execution function: %s" % func
2436 2436 self.showtraceback()
2437 2437 # Deactivate failing function
2438 2438 self._post_execute[func] = False
2439 2439
2440 2440 if store_history:
2441 2441 # Write output to the database. Does nothing unless
2442 2442 # history output logging is enabled.
2443 2443 self.history_manager.store_output(self.execution_count)
2444 2444 # Each cell is a *single* input, regardless of how many lines it has
2445 2445 self.execution_count += 1
2446 2446
2447 2447 def run_ast_nodes(self, nodelist, cell_name, interactivity='last_expr'):
2448 2448 """Run a sequence of AST nodes. The execution mode depends on the
2449 2449 interactivity parameter.
2450 2450
2451 2451 Parameters
2452 2452 ----------
2453 2453 nodelist : list
2454 2454 A sequence of AST nodes to run.
2455 2455 cell_name : str
2456 2456 Will be passed to the compiler as the filename of the cell. Typically
2457 2457 the value returned by ip.compile.cache(cell).
2458 2458 interactivity : str
2459 2459 'all', 'last', 'last_expr' or 'none', specifying which nodes should be
2460 2460 run interactively (displaying output from expressions). 'last_expr'
2461 2461 will run the last node interactively only if it is an expression (i.e.
2462 2462 expressions in loops or other blocks are not displayed. Other values
2463 2463 for this parameter will raise a ValueError.
2464 2464 """
2465 2465 if not nodelist:
2466 2466 return
2467 2467
2468 2468 if interactivity == 'last_expr':
2469 2469 if isinstance(nodelist[-1], ast.Expr):
2470 2470 interactivity = "last"
2471 2471 else:
2472 2472 interactivity = "none"
2473 2473
2474 2474 if interactivity == 'none':
2475 2475 to_run_exec, to_run_interactive = nodelist, []
2476 2476 elif interactivity == 'last':
2477 2477 to_run_exec, to_run_interactive = nodelist[:-1], nodelist[-1:]
2478 2478 elif interactivity == 'all':
2479 2479 to_run_exec, to_run_interactive = [], nodelist
2480 2480 else:
2481 2481 raise ValueError("Interactivity was %r" % interactivity)
2482 2482
2483 2483 exec_count = self.execution_count
2484 2484
2485 2485 try:
2486 2486 for i, node in enumerate(to_run_exec):
2487 2487 mod = ast.Module([node])
2488 2488 code = self.compile(mod, cell_name, "exec")
2489 2489 if self.run_code(code):
2490 2490 return True
2491 2491
2492 2492 for i, node in enumerate(to_run_interactive):
2493 2493 mod = ast.Interactive([node])
2494 2494 code = self.compile(mod, cell_name, "single")
2495 2495 if self.run_code(code):
2496 2496 return True
2497 2497 except:
2498 2498 # It's possible to have exceptions raised here, typically by
2499 2499 # compilation of odd code (such as a naked 'return' outside a
2500 2500 # function) that did parse but isn't valid. Typically the exception
2501 2501 # is a SyntaxError, but it's safest just to catch anything and show
2502 2502 # the user a traceback.
2503 2503
2504 2504 # We do only one try/except outside the loop to minimize the impact
2505 2505 # on runtime, and also because if any node in the node list is
2506 2506 # broken, we should stop execution completely.
2507 2507 self.showtraceback()
2508 2508
2509 2509 return False
2510 2510
2511 2511 def run_code(self, code_obj):
2512 2512 """Execute a code object.
2513 2513
2514 2514 When an exception occurs, self.showtraceback() is called to display a
2515 2515 traceback.
2516 2516
2517 2517 Parameters
2518 2518 ----------
2519 2519 code_obj : code object
2520 2520 A compiled code object, to be executed
2521 2521 post_execute : bool [default: True]
2522 2522 whether to call post_execute hooks after this particular execution.
2523 2523
2524 2524 Returns
2525 2525 -------
2526 2526 False : successful execution.
2527 2527 True : an error occurred.
2528 2528 """
2529 2529
2530 2530 # Set our own excepthook in case the user code tries to call it
2531 2531 # directly, so that the IPython crash handler doesn't get triggered
2532 2532 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
2533 2533
2534 2534 # we save the original sys.excepthook in the instance, in case config
2535 2535 # code (such as magics) needs access to it.
2536 2536 self.sys_excepthook = old_excepthook
2537 2537 outflag = 1 # happens in more places, so it's easier as default
2538 2538 try:
2539 2539 try:
2540 2540 self.hooks.pre_run_code_hook()
2541 2541 #rprint('Running code', repr(code_obj)) # dbg
2542 2542 exec code_obj in self.user_global_ns, self.user_ns
2543 2543 finally:
2544 2544 # Reset our crash handler in place
2545 2545 sys.excepthook = old_excepthook
2546 2546 except SystemExit:
2547 2547 self.showtraceback(exception_only=True)
2548 2548 warn("To exit: use 'exit', 'quit', or Ctrl-D.", level=1)
2549 2549 except self.custom_exceptions:
2550 2550 etype,value,tb = sys.exc_info()
2551 2551 self.CustomTB(etype,value,tb)
2552 2552 except:
2553 2553 self.showtraceback()
2554 2554 else:
2555 2555 outflag = 0
2556 2556 if softspace(sys.stdout, 0):
2557 2557 print
2558 2558
2559 2559 return outflag
2560 2560
2561 2561 # For backwards compatibility
2562 2562 runcode = run_code
2563 2563
2564 2564 #-------------------------------------------------------------------------
2565 2565 # Things related to GUI support and pylab
2566 2566 #-------------------------------------------------------------------------
2567 2567
2568 2568 def enable_pylab(self, gui=None, import_all=True):
2569 2569 raise NotImplementedError('Implement enable_pylab in a subclass')
2570 2570
2571 2571 #-------------------------------------------------------------------------
2572 2572 # Utilities
2573 2573 #-------------------------------------------------------------------------
2574 2574
2575 2575 def var_expand(self, cmd, depth=0, formatter=DollarFormatter()):
2576 2576 """Expand python variables in a string.
2577 2577
2578 2578 The depth argument indicates how many frames above the caller should
2579 2579 be walked to look for the local namespace where to expand variables.
2580 2580
2581 2581 The global namespace for expansion is always the user's interactive
2582 2582 namespace.
2583 2583 """
2584 2584 ns = self.user_ns.copy()
2585 2585 ns.update(sys._getframe(depth+1).f_locals)
2586 2586 ns.pop('self', None)
2587 2587 return formatter.format(cmd, **ns)
2588 2588
2589 2589 def mktempfile(self, data=None, prefix='ipython_edit_'):
2590 2590 """Make a new tempfile and return its filename.
2591 2591
2592 2592 This makes a call to tempfile.mktemp, but it registers the created
2593 2593 filename internally so ipython cleans it up at exit time.
2594 2594
2595 2595 Optional inputs:
2596 2596
2597 2597 - data(None): if data is given, it gets written out to the temp file
2598 2598 immediately, and the file is closed again."""
2599 2599
2600 2600 filename = tempfile.mktemp('.py', prefix)
2601 2601 self.tempfiles.append(filename)
2602 2602
2603 2603 if data:
2604 2604 tmp_file = open(filename,'w')
2605 2605 tmp_file.write(data)
2606 2606 tmp_file.close()
2607 2607 return filename
2608 2608
2609 2609 # TODO: This should be removed when Term is refactored.
2610 2610 def write(self,data):
2611 2611 """Write a string to the default output"""
2612 2612 io.stdout.write(data)
2613 2613
2614 2614 # TODO: This should be removed when Term is refactored.
2615 2615 def write_err(self,data):
2616 2616 """Write a string to the default error output"""
2617 2617 io.stderr.write(data)
2618 2618
2619 def ask_yes_no(self,prompt,default=True):
2619 def ask_yes_no(self, prompt, default=None):
2620 2620 if self.quiet:
2621 2621 return True
2622 2622 return ask_yes_no(prompt,default)
2623 2623
2624 2624 def show_usage(self):
2625 2625 """Show a usage message"""
2626 2626 page.page(IPython.core.usage.interactive_usage)
2627 2627
2628 2628 def find_user_code(self, target, raw=True):
2629 2629 """Get a code string from history, file, or a string or macro.
2630 2630
2631 2631 This is mainly used by magic functions.
2632 2632
2633 2633 Parameters
2634 2634 ----------
2635 2635 target : str
2636 2636 A string specifying code to retrieve. This will be tried respectively
2637 2637 as: ranges of input history (see %history for syntax), a filename, or
2638 2638 an expression evaluating to a string or Macro in the user namespace.
2639 2639 raw : bool
2640 2640 If true (default), retrieve raw history. Has no effect on the other
2641 2641 retrieval mechanisms.
2642 2642
2643 2643 Returns
2644 2644 -------
2645 2645 A string of code.
2646 2646
2647 2647 ValueError is raised if nothing is found, and TypeError if it evaluates
2648 2648 to an object of another type. In each case, .args[0] is a printable
2649 2649 message.
2650 2650 """
2651 2651 code = self.extract_input_lines(target, raw=raw) # Grab history
2652 2652 if code:
2653 2653 return code
2654 2654 if os.path.isfile(target): # Read file
2655 2655 return open(target, "r").read()
2656 2656
2657 2657 try: # User namespace
2658 2658 codeobj = eval(target, self.user_ns)
2659 2659 except Exception:
2660 2660 raise ValueError(("'%s' was not found in history, as a file, nor in"
2661 2661 " the user namespace.") % target)
2662 2662 if isinstance(codeobj, basestring):
2663 2663 return codeobj
2664 2664 elif isinstance(codeobj, Macro):
2665 2665 return codeobj.value
2666 2666
2667 2667 raise TypeError("%s is neither a string nor a macro." % target,
2668 2668 codeobj)
2669 2669
2670 2670 #-------------------------------------------------------------------------
2671 2671 # Things related to IPython exiting
2672 2672 #-------------------------------------------------------------------------
2673 2673 def atexit_operations(self):
2674 2674 """This will be executed at the time of exit.
2675 2675
2676 2676 Cleanup operations and saving of persistent data that is done
2677 2677 unconditionally by IPython should be performed here.
2678 2678
2679 2679 For things that may depend on startup flags or platform specifics (such
2680 2680 as having readline or not), register a separate atexit function in the
2681 2681 code that has the appropriate information, rather than trying to
2682 2682 clutter
2683 2683 """
2684 2684 # Close the history session (this stores the end time and line count)
2685 2685 # this must be *before* the tempfile cleanup, in case of temporary
2686 2686 # history db
2687 2687 self.history_manager.end_session()
2688 2688
2689 2689 # Cleanup all tempfiles left around
2690 2690 for tfile in self.tempfiles:
2691 2691 try:
2692 2692 os.unlink(tfile)
2693 2693 except OSError:
2694 2694 pass
2695 2695
2696 2696 # Clear all user namespaces to release all references cleanly.
2697 2697 self.reset(new_session=False)
2698 2698
2699 2699 # Run user hooks
2700 2700 self.hooks.shutdown_hook()
2701 2701
2702 2702 def cleanup(self):
2703 2703 self.restore_sys_module_state()
2704 2704
2705 2705
2706 2706 class InteractiveShellABC(object):
2707 2707 """An abstract base class for InteractiveShell."""
2708 2708 __metaclass__ = abc.ABCMeta
2709 2709
2710 2710 InteractiveShellABC.register(InteractiveShell)
@@ -1,3738 +1,3739 b''
1 1 # encoding: utf-8
2 2 """Magic functions for InteractiveShell.
3 3 """
4 4
5 5 #-----------------------------------------------------------------------------
6 6 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 7 # Copyright (C) 2001-2007 Fernando Perez <fperez@colorado.edu>
8 8 # Copyright (C) 2008-2009 The IPython Development Team
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 # Imports
16 16 #-----------------------------------------------------------------------------
17 17
18 18 import __builtin__ as builtin_mod
19 19 import __future__
20 20 import bdb
21 21 import inspect
22 22 import imp
23 23 import os
24 24 import sys
25 25 import shutil
26 26 import re
27 27 import time
28 28 import textwrap
29 29 from StringIO import StringIO
30 30 from getopt import getopt,GetoptError
31 31 from pprint import pformat
32 32 from xmlrpclib import ServerProxy
33 33
34 34 # cProfile was added in Python2.5
35 35 try:
36 36 import cProfile as profile
37 37 import pstats
38 38 except ImportError:
39 39 # profile isn't bundled by default in Debian for license reasons
40 40 try:
41 41 import profile,pstats
42 42 except ImportError:
43 43 profile = pstats = None
44 44
45 45 import IPython
46 46 from IPython.core import debugger, oinspect
47 47 from IPython.core.error import TryNext
48 48 from IPython.core.error import UsageError
49 49 from IPython.core.fakemodule import FakeModule
50 50 from IPython.core.profiledir import ProfileDir
51 51 from IPython.core.macro import Macro
52 52 from IPython.core import magic_arguments, page
53 53 from IPython.core.prefilter import ESC_MAGIC
54 54 from IPython.lib.pylabtools import mpl_runner
55 55 from IPython.testing.skipdoctest import skip_doctest
56 56 from IPython.utils import py3compat
57 57 from IPython.utils.io import file_read, nlprint
58 58 from IPython.utils.module_paths import find_mod
59 59 from IPython.utils.path import get_py_filename, unquote_filename
60 60 from IPython.utils.process import arg_split, abbrev_cwd
61 61 from IPython.utils.terminal import set_term_title
62 62 from IPython.utils.text import LSString, SList, format_screen
63 63 from IPython.utils.timing import clock, clock2
64 64 from IPython.utils.warn import warn, error
65 65 from IPython.utils.ipstruct import Struct
66 66 from IPython.config.application import Application
67 67
68 68 #-----------------------------------------------------------------------------
69 69 # Utility functions
70 70 #-----------------------------------------------------------------------------
71 71
72 72 def on_off(tag):
73 73 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
74 74 return ['OFF','ON'][tag]
75 75
76 76 class Bunch: pass
77 77
78 78 def compress_dhist(dh):
79 79 head, tail = dh[:-10], dh[-10:]
80 80
81 81 newhead = []
82 82 done = set()
83 83 for h in head:
84 84 if h in done:
85 85 continue
86 86 newhead.append(h)
87 87 done.add(h)
88 88
89 89 return newhead + tail
90 90
91 91 def needs_local_scope(func):
92 92 """Decorator to mark magic functions which need to local scope to run."""
93 93 func.needs_local_scope = True
94 94 return func
95 95
96 96
97 97 # Used for exception handling in magic_edit
98 98 class MacroToEdit(ValueError): pass
99 99
100 100 #***************************************************************************
101 101 # Main class implementing Magic functionality
102 102
103 103 # XXX - for some odd reason, if Magic is made a new-style class, we get errors
104 104 # on construction of the main InteractiveShell object. Something odd is going
105 105 # on with super() calls, Configurable and the MRO... For now leave it as-is, but
106 106 # eventually this needs to be clarified.
107 107 # BG: This is because InteractiveShell inherits from this, but is itself a
108 108 # Configurable. This messes up the MRO in some way. The fix is that we need to
109 109 # make Magic a configurable that InteractiveShell does not subclass.
110 110
111 111 class Magic:
112 112 """Magic functions for InteractiveShell.
113 113
114 114 Shell functions which can be reached as %function_name. All magic
115 115 functions should accept a string, which they can parse for their own
116 116 needs. This can make some functions easier to type, eg `%cd ../`
117 117 vs. `%cd("../")`
118 118
119 119 ALL definitions MUST begin with the prefix magic_. The user won't need it
120 120 at the command line, but it is is needed in the definition. """
121 121
122 122 # class globals
123 123 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
124 124 'Automagic is ON, % prefix NOT needed for magic functions.']
125 125
126 126
127 127 configurables = None
128 128 #......................................................................
129 129 # some utility functions
130 130
131 131 def __init__(self,shell):
132 132
133 133 self.options_table = {}
134 134 if profile is None:
135 135 self.magic_prun = self.profile_missing_notice
136 136 self.shell = shell
137 137 if self.configurables is None:
138 138 self.configurables = []
139 139
140 140 # namespace for holding state we may need
141 141 self._magic_state = Bunch()
142 142
143 143 def profile_missing_notice(self, *args, **kwargs):
144 144 error("""\
145 145 The profile module could not be found. It has been removed from the standard
146 146 python packages because of its non-free license. To use profiling, install the
147 147 python-profiler package from non-free.""")
148 148
149 149 def default_option(self,fn,optstr):
150 150 """Make an entry in the options_table for fn, with value optstr"""
151 151
152 152 if fn not in self.lsmagic():
153 153 error("%s is not a magic function" % fn)
154 154 self.options_table[fn] = optstr
155 155
156 156 def lsmagic(self):
157 157 """Return a list of currently available magic functions.
158 158
159 159 Gives a list of the bare names after mangling (['ls','cd', ...], not
160 160 ['magic_ls','magic_cd',...]"""
161 161
162 162 # FIXME. This needs a cleanup, in the way the magics list is built.
163 163
164 164 # magics in class definition
165 165 class_magic = lambda fn: fn.startswith('magic_') and \
166 166 callable(Magic.__dict__[fn])
167 167 # in instance namespace (run-time user additions)
168 168 inst_magic = lambda fn: fn.startswith('magic_') and \
169 169 callable(self.__dict__[fn])
170 170 # and bound magics by user (so they can access self):
171 171 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
172 172 callable(self.__class__.__dict__[fn])
173 173 magics = filter(class_magic,Magic.__dict__.keys()) + \
174 174 filter(inst_magic,self.__dict__.keys()) + \
175 175 filter(inst_bound_magic,self.__class__.__dict__.keys())
176 176 out = []
177 177 for fn in set(magics):
178 178 out.append(fn.replace('magic_','',1))
179 179 out.sort()
180 180 return out
181 181
182 182 def extract_input_lines(self, range_str, raw=False):
183 183 """Return as a string a set of input history slices.
184 184
185 185 Inputs:
186 186
187 187 - range_str: the set of slices is given as a string, like
188 188 "~5/6-~4/2 4:8 9", since this function is for use by magic functions
189 189 which get their arguments as strings. The number before the / is the
190 190 session number: ~n goes n back from the current session.
191 191
192 192 Optional inputs:
193 193
194 194 - raw(False): by default, the processed input is used. If this is
195 195 true, the raw input history is used instead.
196 196
197 197 Note that slices can be called with two notations:
198 198
199 199 N:M -> standard python form, means including items N...(M-1).
200 200
201 201 N-M -> include items N..M (closed endpoint)."""
202 202 lines = self.shell.history_manager.\
203 203 get_range_by_str(range_str, raw=raw)
204 204 return "\n".join(x for _, _, x in lines)
205 205
206 206 def arg_err(self,func):
207 207 """Print docstring if incorrect arguments were passed"""
208 208 print 'Error in arguments:'
209 209 print oinspect.getdoc(func)
210 210
211 211 def format_latex(self,strng):
212 212 """Format a string for latex inclusion."""
213 213
214 214 # Characters that need to be escaped for latex:
215 215 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
216 216 # Magic command names as headers:
217 217 cmd_name_re = re.compile(r'^(%s.*?):' % ESC_MAGIC,
218 218 re.MULTILINE)
219 219 # Magic commands
220 220 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % ESC_MAGIC,
221 221 re.MULTILINE)
222 222 # Paragraph continue
223 223 par_re = re.compile(r'\\$',re.MULTILINE)
224 224
225 225 # The "\n" symbol
226 226 newline_re = re.compile(r'\\n')
227 227
228 228 # Now build the string for output:
229 229 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
230 230 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
231 231 strng)
232 232 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
233 233 strng = par_re.sub(r'\\\\',strng)
234 234 strng = escape_re.sub(r'\\\1',strng)
235 235 strng = newline_re.sub(r'\\textbackslash{}n',strng)
236 236 return strng
237 237
238 238 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
239 239 """Parse options passed to an argument string.
240 240
241 241 The interface is similar to that of getopt(), but it returns back a
242 242 Struct with the options as keys and the stripped argument string still
243 243 as a string.
244 244
245 245 arg_str is quoted as a true sys.argv vector by using shlex.split.
246 246 This allows us to easily expand variables, glob files, quote
247 247 arguments, etc.
248 248
249 249 Options:
250 250 -mode: default 'string'. If given as 'list', the argument string is
251 251 returned as a list (split on whitespace) instead of a string.
252 252
253 253 -list_all: put all option values in lists. Normally only options
254 254 appearing more than once are put in a list.
255 255
256 256 -posix (True): whether to split the input line in POSIX mode or not,
257 257 as per the conventions outlined in the shlex module from the
258 258 standard library."""
259 259
260 260 # inject default options at the beginning of the input line
261 261 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
262 262 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
263 263
264 264 mode = kw.get('mode','string')
265 265 if mode not in ['string','list']:
266 266 raise ValueError,'incorrect mode given: %s' % mode
267 267 # Get options
268 268 list_all = kw.get('list_all',0)
269 269 posix = kw.get('posix', os.name == 'posix')
270 270
271 271 # Check if we have more than one argument to warrant extra processing:
272 272 odict = {} # Dictionary with options
273 273 args = arg_str.split()
274 274 if len(args) >= 1:
275 275 # If the list of inputs only has 0 or 1 thing in it, there's no
276 276 # need to look for options
277 277 argv = arg_split(arg_str,posix)
278 278 # Do regular option processing
279 279 try:
280 280 opts,args = getopt(argv,opt_str,*long_opts)
281 281 except GetoptError,e:
282 282 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
283 283 " ".join(long_opts)))
284 284 for o,a in opts:
285 285 if o.startswith('--'):
286 286 o = o[2:]
287 287 else:
288 288 o = o[1:]
289 289 try:
290 290 odict[o].append(a)
291 291 except AttributeError:
292 292 odict[o] = [odict[o],a]
293 293 except KeyError:
294 294 if list_all:
295 295 odict[o] = [a]
296 296 else:
297 297 odict[o] = a
298 298
299 299 # Prepare opts,args for return
300 300 opts = Struct(odict)
301 301 if mode == 'string':
302 302 args = ' '.join(args)
303 303
304 304 return opts,args
305 305
306 306 #......................................................................
307 307 # And now the actual magic functions
308 308
309 309 # Functions for IPython shell work (vars,funcs, config, etc)
310 310 def magic_lsmagic(self, parameter_s = ''):
311 311 """List currently available magic functions."""
312 312 mesc = ESC_MAGIC
313 313 print 'Available magic functions:\n'+mesc+\
314 314 (' '+mesc).join(self.lsmagic())
315 315 print '\n' + Magic.auto_status[self.shell.automagic]
316 316 return None
317 317
318 318 def magic_magic(self, parameter_s = ''):
319 319 """Print information about the magic function system.
320 320
321 321 Supported formats: -latex, -brief, -rest
322 322 """
323 323
324 324 mode = ''
325 325 try:
326 326 if parameter_s.split()[0] == '-latex':
327 327 mode = 'latex'
328 328 if parameter_s.split()[0] == '-brief':
329 329 mode = 'brief'
330 330 if parameter_s.split()[0] == '-rest':
331 331 mode = 'rest'
332 332 rest_docs = []
333 333 except:
334 334 pass
335 335
336 336 magic_docs = []
337 337 for fname in self.lsmagic():
338 338 mname = 'magic_' + fname
339 339 for space in (Magic,self,self.__class__):
340 340 try:
341 341 fn = space.__dict__[mname]
342 342 except KeyError:
343 343 pass
344 344 else:
345 345 break
346 346 if mode == 'brief':
347 347 # only first line
348 348 if fn.__doc__:
349 349 fndoc = fn.__doc__.split('\n',1)[0]
350 350 else:
351 351 fndoc = 'No documentation'
352 352 else:
353 353 if fn.__doc__:
354 354 fndoc = fn.__doc__.rstrip()
355 355 else:
356 356 fndoc = 'No documentation'
357 357
358 358
359 359 if mode == 'rest':
360 360 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %(ESC_MAGIC,
361 361 fname,fndoc))
362 362
363 363 else:
364 364 magic_docs.append('%s%s:\n\t%s\n' %(ESC_MAGIC,
365 365 fname,fndoc))
366 366
367 367 magic_docs = ''.join(magic_docs)
368 368
369 369 if mode == 'rest':
370 370 return "".join(rest_docs)
371 371
372 372 if mode == 'latex':
373 373 print self.format_latex(magic_docs)
374 374 return
375 375 else:
376 376 magic_docs = format_screen(magic_docs)
377 377 if mode == 'brief':
378 378 return magic_docs
379 379
380 380 outmsg = """
381 381 IPython's 'magic' functions
382 382 ===========================
383 383
384 384 The magic function system provides a series of functions which allow you to
385 385 control the behavior of IPython itself, plus a lot of system-type
386 386 features. All these functions are prefixed with a % character, but parameters
387 387 are given without parentheses or quotes.
388 388
389 389 NOTE: If you have 'automagic' enabled (via the command line option or with the
390 390 %automagic function), you don't need to type in the % explicitly. By default,
391 391 IPython ships with automagic on, so you should only rarely need the % escape.
392 392
393 393 Example: typing '%cd mydir' (without the quotes) changes you working directory
394 394 to 'mydir', if it exists.
395 395
396 396 For a list of the available magic functions, use %lsmagic. For a description
397 397 of any of them, type %magic_name?, e.g. '%cd?'.
398 398
399 399 Currently the magic system has the following functions:\n"""
400 400
401 401 mesc = ESC_MAGIC
402 402 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
403 403 "\n\n%s%s\n\n%s" % (outmsg,
404 404 magic_docs,mesc,mesc,
405 405 (' '+mesc).join(self.lsmagic()),
406 406 Magic.auto_status[self.shell.automagic] ) )
407 407 page.page(outmsg)
408 408
409 409 def magic_automagic(self, parameter_s = ''):
410 410 """Make magic functions callable without having to type the initial %.
411 411
412 412 Without argumentsl toggles on/off (when off, you must call it as
413 413 %automagic, of course). With arguments it sets the value, and you can
414 414 use any of (case insensitive):
415 415
416 416 - on,1,True: to activate
417 417
418 418 - off,0,False: to deactivate.
419 419
420 420 Note that magic functions have lowest priority, so if there's a
421 421 variable whose name collides with that of a magic fn, automagic won't
422 422 work for that function (you get the variable instead). However, if you
423 423 delete the variable (del var), the previously shadowed magic function
424 424 becomes visible to automagic again."""
425 425
426 426 arg = parameter_s.lower()
427 427 if parameter_s in ('on','1','true'):
428 428 self.shell.automagic = True
429 429 elif parameter_s in ('off','0','false'):
430 430 self.shell.automagic = False
431 431 else:
432 432 self.shell.automagic = not self.shell.automagic
433 433 print '\n' + Magic.auto_status[self.shell.automagic]
434 434
435 435 @skip_doctest
436 436 def magic_autocall(self, parameter_s = ''):
437 437 """Make functions callable without having to type parentheses.
438 438
439 439 Usage:
440 440
441 441 %autocall [mode]
442 442
443 443 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
444 444 value is toggled on and off (remembering the previous state).
445 445
446 446 In more detail, these values mean:
447 447
448 448 0 -> fully disabled
449 449
450 450 1 -> active, but do not apply if there are no arguments on the line.
451 451
452 452 In this mode, you get:
453 453
454 454 In [1]: callable
455 455 Out[1]: <built-in function callable>
456 456
457 457 In [2]: callable 'hello'
458 458 ------> callable('hello')
459 459 Out[2]: False
460 460
461 461 2 -> Active always. Even if no arguments are present, the callable
462 462 object is called:
463 463
464 464 In [2]: float
465 465 ------> float()
466 466 Out[2]: 0.0
467 467
468 468 Note that even with autocall off, you can still use '/' at the start of
469 469 a line to treat the first argument on the command line as a function
470 470 and add parentheses to it:
471 471
472 472 In [8]: /str 43
473 473 ------> str(43)
474 474 Out[8]: '43'
475 475
476 476 # all-random (note for auto-testing)
477 477 """
478 478
479 479 if parameter_s:
480 480 arg = int(parameter_s)
481 481 else:
482 482 arg = 'toggle'
483 483
484 484 if not arg in (0,1,2,'toggle'):
485 485 error('Valid modes: (0->Off, 1->Smart, 2->Full')
486 486 return
487 487
488 488 if arg in (0,1,2):
489 489 self.shell.autocall = arg
490 490 else: # toggle
491 491 if self.shell.autocall:
492 492 self._magic_state.autocall_save = self.shell.autocall
493 493 self.shell.autocall = 0
494 494 else:
495 495 try:
496 496 self.shell.autocall = self._magic_state.autocall_save
497 497 except AttributeError:
498 498 self.shell.autocall = self._magic_state.autocall_save = 1
499 499
500 500 print "Automatic calling is:",['OFF','Smart','Full'][self.shell.autocall]
501 501
502 502
503 503 def magic_page(self, parameter_s=''):
504 504 """Pretty print the object and display it through a pager.
505 505
506 506 %page [options] OBJECT
507 507
508 508 If no object is given, use _ (last output).
509 509
510 510 Options:
511 511
512 512 -r: page str(object), don't pretty-print it."""
513 513
514 514 # After a function contributed by Olivier Aubert, slightly modified.
515 515
516 516 # Process options/args
517 517 opts,args = self.parse_options(parameter_s,'r')
518 518 raw = 'r' in opts
519 519
520 520 oname = args and args or '_'
521 521 info = self._ofind(oname)
522 522 if info['found']:
523 523 txt = (raw and str or pformat)( info['obj'] )
524 524 page.page(txt)
525 525 else:
526 526 print 'Object `%s` not found' % oname
527 527
528 528 def magic_profile(self, parameter_s=''):
529 529 """Print your currently active IPython profile."""
530 530 from IPython.core.application import BaseIPythonApplication
531 531 if BaseIPythonApplication.initialized():
532 532 print BaseIPythonApplication.instance().profile
533 533 else:
534 534 error("profile is an application-level value, but you don't appear to be in an IPython application")
535 535
536 536 def magic_pinfo(self, parameter_s='', namespaces=None):
537 537 """Provide detailed information about an object.
538 538
539 539 '%pinfo object' is just a synonym for object? or ?object."""
540 540
541 541 #print 'pinfo par: <%s>' % parameter_s # dbg
542 542
543 543
544 544 # detail_level: 0 -> obj? , 1 -> obj??
545 545 detail_level = 0
546 546 # We need to detect if we got called as 'pinfo pinfo foo', which can
547 547 # happen if the user types 'pinfo foo?' at the cmd line.
548 548 pinfo,qmark1,oname,qmark2 = \
549 549 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
550 550 if pinfo or qmark1 or qmark2:
551 551 detail_level = 1
552 552 if "*" in oname:
553 553 self.magic_psearch(oname)
554 554 else:
555 555 self.shell._inspect('pinfo', oname, detail_level=detail_level,
556 556 namespaces=namespaces)
557 557
558 558 def magic_pinfo2(self, parameter_s='', namespaces=None):
559 559 """Provide extra detailed information about an object.
560 560
561 561 '%pinfo2 object' is just a synonym for object?? or ??object."""
562 562 self.shell._inspect('pinfo', parameter_s, detail_level=1,
563 563 namespaces=namespaces)
564 564
565 565 @skip_doctest
566 566 def magic_pdef(self, parameter_s='', namespaces=None):
567 567 """Print the definition header for any callable object.
568 568
569 569 If the object is a class, print the constructor information.
570 570
571 571 Examples
572 572 --------
573 573 ::
574 574
575 575 In [3]: %pdef urllib.urlopen
576 576 urllib.urlopen(url, data=None, proxies=None)
577 577 """
578 578 self._inspect('pdef',parameter_s, namespaces)
579 579
580 580 def magic_pdoc(self, parameter_s='', namespaces=None):
581 581 """Print the docstring for an object.
582 582
583 583 If the given object is a class, it will print both the class and the
584 584 constructor docstrings."""
585 585 self._inspect('pdoc',parameter_s, namespaces)
586 586
587 587 def magic_psource(self, parameter_s='', namespaces=None):
588 588 """Print (or run through pager) the source code for an object."""
589 589 self._inspect('psource',parameter_s, namespaces)
590 590
591 591 def magic_pfile(self, parameter_s=''):
592 592 """Print (or run through pager) the file where an object is defined.
593 593
594 594 The file opens at the line where the object definition begins. IPython
595 595 will honor the environment variable PAGER if set, and otherwise will
596 596 do its best to print the file in a convenient form.
597 597
598 598 If the given argument is not an object currently defined, IPython will
599 599 try to interpret it as a filename (automatically adding a .py extension
600 600 if needed). You can thus use %pfile as a syntax highlighting code
601 601 viewer."""
602 602
603 603 # first interpret argument as an object name
604 604 out = self._inspect('pfile',parameter_s)
605 605 # if not, try the input as a filename
606 606 if out == 'not found':
607 607 try:
608 608 filename = get_py_filename(parameter_s)
609 609 except IOError,msg:
610 610 print msg
611 611 return
612 612 page.page(self.shell.inspector.format(file(filename).read()))
613 613
614 614 def magic_psearch(self, parameter_s=''):
615 615 """Search for object in namespaces by wildcard.
616 616
617 617 %psearch [options] PATTERN [OBJECT TYPE]
618 618
619 619 Note: ? can be used as a synonym for %psearch, at the beginning or at
620 620 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
621 621 rest of the command line must be unchanged (options come first), so
622 622 for example the following forms are equivalent
623 623
624 624 %psearch -i a* function
625 625 -i a* function?
626 626 ?-i a* function
627 627
628 628 Arguments:
629 629
630 630 PATTERN
631 631
632 632 where PATTERN is a string containing * as a wildcard similar to its
633 633 use in a shell. The pattern is matched in all namespaces on the
634 634 search path. By default objects starting with a single _ are not
635 635 matched, many IPython generated objects have a single
636 636 underscore. The default is case insensitive matching. Matching is
637 637 also done on the attributes of objects and not only on the objects
638 638 in a module.
639 639
640 640 [OBJECT TYPE]
641 641
642 642 Is the name of a python type from the types module. The name is
643 643 given in lowercase without the ending type, ex. StringType is
644 644 written string. By adding a type here only objects matching the
645 645 given type are matched. Using all here makes the pattern match all
646 646 types (this is the default).
647 647
648 648 Options:
649 649
650 650 -a: makes the pattern match even objects whose names start with a
651 651 single underscore. These names are normally ommitted from the
652 652 search.
653 653
654 654 -i/-c: make the pattern case insensitive/sensitive. If neither of
655 655 these options are given, the default is read from your configuration
656 656 file, with the option ``InteractiveShell.wildcards_case_sensitive``.
657 657 If this option is not specified in your configuration file, IPython's
658 658 internal default is to do a case sensitive search.
659 659
660 660 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
661 661 specifiy can be searched in any of the following namespaces:
662 662 'builtin', 'user', 'user_global','internal', 'alias', where
663 663 'builtin' and 'user' are the search defaults. Note that you should
664 664 not use quotes when specifying namespaces.
665 665
666 666 'Builtin' contains the python module builtin, 'user' contains all
667 667 user data, 'alias' only contain the shell aliases and no python
668 668 objects, 'internal' contains objects used by IPython. The
669 669 'user_global' namespace is only used by embedded IPython instances,
670 670 and it contains module-level globals. You can add namespaces to the
671 671 search with -s or exclude them with -e (these options can be given
672 672 more than once).
673 673
674 674 Examples:
675 675
676 676 %psearch a* -> objects beginning with an a
677 677 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
678 678 %psearch a* function -> all functions beginning with an a
679 679 %psearch re.e* -> objects beginning with an e in module re
680 680 %psearch r*.e* -> objects that start with e in modules starting in r
681 681 %psearch r*.* string -> all strings in modules beginning with r
682 682
683 683 Case sensitve search:
684 684
685 685 %psearch -c a* list all object beginning with lower case a
686 686
687 687 Show objects beginning with a single _:
688 688
689 689 %psearch -a _* list objects beginning with a single underscore"""
690 690 try:
691 691 parameter_s.encode('ascii')
692 692 except UnicodeEncodeError:
693 693 print 'Python identifiers can only contain ascii characters.'
694 694 return
695 695
696 696 # default namespaces to be searched
697 697 def_search = ['user','builtin']
698 698
699 699 # Process options/args
700 700 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
701 701 opt = opts.get
702 702 shell = self.shell
703 703 psearch = shell.inspector.psearch
704 704
705 705 # select case options
706 706 if opts.has_key('i'):
707 707 ignore_case = True
708 708 elif opts.has_key('c'):
709 709 ignore_case = False
710 710 else:
711 711 ignore_case = not shell.wildcards_case_sensitive
712 712
713 713 # Build list of namespaces to search from user options
714 714 def_search.extend(opt('s',[]))
715 715 ns_exclude = ns_exclude=opt('e',[])
716 716 ns_search = [nm for nm in def_search if nm not in ns_exclude]
717 717
718 718 # Call the actual search
719 719 try:
720 720 psearch(args,shell.ns_table,ns_search,
721 721 show_all=opt('a'),ignore_case=ignore_case)
722 722 except:
723 723 shell.showtraceback()
724 724
725 725 @skip_doctest
726 726 def magic_who_ls(self, parameter_s=''):
727 727 """Return a sorted list of all interactive variables.
728 728
729 729 If arguments are given, only variables of types matching these
730 730 arguments are returned.
731 731
732 732 Examples
733 733 --------
734 734
735 735 Define two variables and list them with who_ls::
736 736
737 737 In [1]: alpha = 123
738 738
739 739 In [2]: beta = 'test'
740 740
741 741 In [3]: %who_ls
742 742 Out[3]: ['alpha', 'beta']
743 743
744 744 In [4]: %who_ls int
745 745 Out[4]: ['alpha']
746 746
747 747 In [5]: %who_ls str
748 748 Out[5]: ['beta']
749 749 """
750 750
751 751 user_ns = self.shell.user_ns
752 752 internal_ns = self.shell.internal_ns
753 753 user_ns_hidden = self.shell.user_ns_hidden
754 754 out = [ i for i in user_ns
755 755 if not i.startswith('_') \
756 756 and not (i in internal_ns or i in user_ns_hidden) ]
757 757
758 758 typelist = parameter_s.split()
759 759 if typelist:
760 760 typeset = set(typelist)
761 761 out = [i for i in out if type(user_ns[i]).__name__ in typeset]
762 762
763 763 out.sort()
764 764 return out
765 765
766 766 @skip_doctest
767 767 def magic_who(self, parameter_s=''):
768 768 """Print all interactive variables, with some minimal formatting.
769 769
770 770 If any arguments are given, only variables whose type matches one of
771 771 these are printed. For example:
772 772
773 773 %who function str
774 774
775 775 will only list functions and strings, excluding all other types of
776 776 variables. To find the proper type names, simply use type(var) at a
777 777 command line to see how python prints type names. For example:
778 778
779 779 In [1]: type('hello')\\
780 780 Out[1]: <type 'str'>
781 781
782 782 indicates that the type name for strings is 'str'.
783 783
784 784 %who always excludes executed names loaded through your configuration
785 785 file and things which are internal to IPython.
786 786
787 787 This is deliberate, as typically you may load many modules and the
788 788 purpose of %who is to show you only what you've manually defined.
789 789
790 790 Examples
791 791 --------
792 792
793 793 Define two variables and list them with who::
794 794
795 795 In [1]: alpha = 123
796 796
797 797 In [2]: beta = 'test'
798 798
799 799 In [3]: %who
800 800 alpha beta
801 801
802 802 In [4]: %who int
803 803 alpha
804 804
805 805 In [5]: %who str
806 806 beta
807 807 """
808 808
809 809 varlist = self.magic_who_ls(parameter_s)
810 810 if not varlist:
811 811 if parameter_s:
812 812 print 'No variables match your requested type.'
813 813 else:
814 814 print 'Interactive namespace is empty.'
815 815 return
816 816
817 817 # if we have variables, move on...
818 818 count = 0
819 819 for i in varlist:
820 820 print i+'\t',
821 821 count += 1
822 822 if count > 8:
823 823 count = 0
824 824 print
825 825 print
826 826
827 827 @skip_doctest
828 828 def magic_whos(self, parameter_s=''):
829 829 """Like %who, but gives some extra information about each variable.
830 830
831 831 The same type filtering of %who can be applied here.
832 832
833 833 For all variables, the type is printed. Additionally it prints:
834 834
835 835 - For {},[],(): their length.
836 836
837 837 - For numpy arrays, a summary with shape, number of
838 838 elements, typecode and size in memory.
839 839
840 840 - Everything else: a string representation, snipping their middle if
841 841 too long.
842 842
843 843 Examples
844 844 --------
845 845
846 846 Define two variables and list them with whos::
847 847
848 848 In [1]: alpha = 123
849 849
850 850 In [2]: beta = 'test'
851 851
852 852 In [3]: %whos
853 853 Variable Type Data/Info
854 854 --------------------------------
855 855 alpha int 123
856 856 beta str test
857 857 """
858 858
859 859 varnames = self.magic_who_ls(parameter_s)
860 860 if not varnames:
861 861 if parameter_s:
862 862 print 'No variables match your requested type.'
863 863 else:
864 864 print 'Interactive namespace is empty.'
865 865 return
866 866
867 867 # if we have variables, move on...
868 868
869 869 # for these types, show len() instead of data:
870 870 seq_types = ['dict', 'list', 'tuple']
871 871
872 872 # for numpy arrays, display summary info
873 873 ndarray_type = None
874 874 if 'numpy' in sys.modules:
875 875 try:
876 876 from numpy import ndarray
877 877 except ImportError:
878 878 pass
879 879 else:
880 880 ndarray_type = ndarray.__name__
881 881
882 882 # Find all variable names and types so we can figure out column sizes
883 883 def get_vars(i):
884 884 return self.shell.user_ns[i]
885 885
886 886 # some types are well known and can be shorter
887 887 abbrevs = {'IPython.core.macro.Macro' : 'Macro'}
888 888 def type_name(v):
889 889 tn = type(v).__name__
890 890 return abbrevs.get(tn,tn)
891 891
892 892 varlist = map(get_vars,varnames)
893 893
894 894 typelist = []
895 895 for vv in varlist:
896 896 tt = type_name(vv)
897 897
898 898 if tt=='instance':
899 899 typelist.append( abbrevs.get(str(vv.__class__),
900 900 str(vv.__class__)))
901 901 else:
902 902 typelist.append(tt)
903 903
904 904 # column labels and # of spaces as separator
905 905 varlabel = 'Variable'
906 906 typelabel = 'Type'
907 907 datalabel = 'Data/Info'
908 908 colsep = 3
909 909 # variable format strings
910 910 vformat = "{0:<{varwidth}}{1:<{typewidth}}"
911 911 aformat = "%s: %s elems, type `%s`, %s bytes"
912 912 # find the size of the columns to format the output nicely
913 913 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
914 914 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
915 915 # table header
916 916 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
917 917 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
918 918 # and the table itself
919 919 kb = 1024
920 920 Mb = 1048576 # kb**2
921 921 for vname,var,vtype in zip(varnames,varlist,typelist):
922 922 print vformat.format(vname, vtype, varwidth=varwidth, typewidth=typewidth),
923 923 if vtype in seq_types:
924 924 print "n="+str(len(var))
925 925 elif vtype == ndarray_type:
926 926 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
927 927 if vtype==ndarray_type:
928 928 # numpy
929 929 vsize = var.size
930 930 vbytes = vsize*var.itemsize
931 931 vdtype = var.dtype
932 932 else:
933 933 # Numeric
934 934 vsize = Numeric.size(var)
935 935 vbytes = vsize*var.itemsize()
936 936 vdtype = var.typecode()
937 937
938 938 if vbytes < 100000:
939 939 print aformat % (vshape,vsize,vdtype,vbytes)
940 940 else:
941 941 print aformat % (vshape,vsize,vdtype,vbytes),
942 942 if vbytes < Mb:
943 943 print '(%s kb)' % (vbytes/kb,)
944 944 else:
945 945 print '(%s Mb)' % (vbytes/Mb,)
946 946 else:
947 947 try:
948 948 vstr = str(var)
949 949 except UnicodeEncodeError:
950 950 vstr = unicode(var).encode(sys.getdefaultencoding(),
951 951 'backslashreplace')
952 952 vstr = vstr.replace('\n','\\n')
953 953 if len(vstr) < 50:
954 954 print vstr
955 955 else:
956 956 print vstr[:25] + "<...>" + vstr[-25:]
957 957
958 958 def magic_reset(self, parameter_s=''):
959 959 """Resets the namespace by removing all names defined by the user.
960 960
961 961 Parameters
962 962 ----------
963 963 -f : force reset without asking for confirmation.
964 964
965 965 -s : 'Soft' reset: Only clears your namespace, leaving history intact.
966 966 References to objects may be kept. By default (without this option),
967 967 we do a 'hard' reset, giving you a new session and removing all
968 968 references to objects from the current session.
969 969
970 970 Examples
971 971 --------
972 972 In [6]: a = 1
973 973
974 974 In [7]: a
975 975 Out[7]: 1
976 976
977 977 In [8]: 'a' in _ip.user_ns
978 978 Out[8]: True
979 979
980 980 In [9]: %reset -f
981 981
982 982 In [1]: 'a' in _ip.user_ns
983 983 Out[1]: False
984 984 """
985 985 opts, args = self.parse_options(parameter_s,'sf')
986 986 if 'f' in opts:
987 987 ans = True
988 988 else:
989 989 ans = self.shell.ask_yes_no(
990 990 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ", default='n')
991 991 if not ans:
992 992 print 'Nothing done.'
993 993 return
994 994
995 995 if 's' in opts: # Soft reset
996 996 user_ns = self.shell.user_ns
997 997 for i in self.magic_who_ls():
998 998 del(user_ns[i])
999 999
1000 1000 else: # Hard reset
1001 1001 self.shell.reset(new_session = False)
1002 1002
1003 1003
1004 1004
1005 1005 def magic_reset_selective(self, parameter_s=''):
1006 1006 """Resets the namespace by removing names defined by the user.
1007 1007
1008 1008 Input/Output history are left around in case you need them.
1009 1009
1010 1010 %reset_selective [-f] regex
1011 1011
1012 1012 No action is taken if regex is not included
1013 1013
1014 1014 Options
1015 1015 -f : force reset without asking for confirmation.
1016 1016
1017 1017 Examples
1018 1018 --------
1019 1019
1020 1020 We first fully reset the namespace so your output looks identical to
1021 1021 this example for pedagogical reasons; in practice you do not need a
1022 1022 full reset.
1023 1023
1024 1024 In [1]: %reset -f
1025 1025
1026 1026 Now, with a clean namespace we can make a few variables and use
1027 1027 %reset_selective to only delete names that match our regexp:
1028 1028
1029 1029 In [2]: a=1; b=2; c=3; b1m=4; b2m=5; b3m=6; b4m=7; b2s=8
1030 1030
1031 1031 In [3]: who_ls
1032 1032 Out[3]: ['a', 'b', 'b1m', 'b2m', 'b2s', 'b3m', 'b4m', 'c']
1033 1033
1034 1034 In [4]: %reset_selective -f b[2-3]m
1035 1035
1036 1036 In [5]: who_ls
1037 1037 Out[5]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1038 1038
1039 1039 In [6]: %reset_selective -f d
1040 1040
1041 1041 In [7]: who_ls
1042 1042 Out[7]: ['a', 'b', 'b1m', 'b2s', 'b4m', 'c']
1043 1043
1044 1044 In [8]: %reset_selective -f c
1045 1045
1046 1046 In [9]: who_ls
1047 1047 Out[9]: ['a', 'b', 'b1m', 'b2s', 'b4m']
1048 1048
1049 1049 In [10]: %reset_selective -f b
1050 1050
1051 1051 In [11]: who_ls
1052 1052 Out[11]: ['a']
1053 1053 """
1054 1054
1055 1055 opts, regex = self.parse_options(parameter_s,'f')
1056 1056
1057 1057 if opts.has_key('f'):
1058 1058 ans = True
1059 1059 else:
1060 1060 ans = self.shell.ask_yes_no(
1061 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1061 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ",
1062 default='n')
1062 1063 if not ans:
1063 1064 print 'Nothing done.'
1064 1065 return
1065 1066 user_ns = self.shell.user_ns
1066 1067 if not regex:
1067 1068 print 'No regex pattern specified. Nothing done.'
1068 1069 return
1069 1070 else:
1070 1071 try:
1071 1072 m = re.compile(regex)
1072 1073 except TypeError:
1073 1074 raise TypeError('regex must be a string or compiled pattern')
1074 1075 for i in self.magic_who_ls():
1075 1076 if m.search(i):
1076 1077 del(user_ns[i])
1077 1078
1078 1079 def magic_xdel(self, parameter_s=''):
1079 1080 """Delete a variable, trying to clear it from anywhere that
1080 1081 IPython's machinery has references to it. By default, this uses
1081 1082 the identity of the named object in the user namespace to remove
1082 1083 references held under other names. The object is also removed
1083 1084 from the output history.
1084 1085
1085 1086 Options
1086 1087 -n : Delete the specified name from all namespaces, without
1087 1088 checking their identity.
1088 1089 """
1089 1090 opts, varname = self.parse_options(parameter_s,'n')
1090 1091 try:
1091 1092 self.shell.del_var(varname, ('n' in opts))
1092 1093 except (NameError, ValueError) as e:
1093 1094 print type(e).__name__ +": "+ str(e)
1094 1095
1095 1096 def magic_logstart(self,parameter_s=''):
1096 1097 """Start logging anywhere in a session.
1097 1098
1098 1099 %logstart [-o|-r|-t] [log_name [log_mode]]
1099 1100
1100 1101 If no name is given, it defaults to a file named 'ipython_log.py' in your
1101 1102 current directory, in 'rotate' mode (see below).
1102 1103
1103 1104 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1104 1105 history up to that point and then continues logging.
1105 1106
1106 1107 %logstart takes a second optional parameter: logging mode. This can be one
1107 1108 of (note that the modes are given unquoted):\\
1108 1109 append: well, that says it.\\
1109 1110 backup: rename (if exists) to name~ and start name.\\
1110 1111 global: single logfile in your home dir, appended to.\\
1111 1112 over : overwrite existing log.\\
1112 1113 rotate: create rotating logs name.1~, name.2~, etc.
1113 1114
1114 1115 Options:
1115 1116
1116 1117 -o: log also IPython's output. In this mode, all commands which
1117 1118 generate an Out[NN] prompt are recorded to the logfile, right after
1118 1119 their corresponding input line. The output lines are always
1119 1120 prepended with a '#[Out]# ' marker, so that the log remains valid
1120 1121 Python code.
1121 1122
1122 1123 Since this marker is always the same, filtering only the output from
1123 1124 a log is very easy, using for example a simple awk call:
1124 1125
1125 1126 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1126 1127
1127 1128 -r: log 'raw' input. Normally, IPython's logs contain the processed
1128 1129 input, so that user lines are logged in their final form, converted
1129 1130 into valid Python. For example, %Exit is logged as
1130 1131 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1131 1132 exactly as typed, with no transformations applied.
1132 1133
1133 1134 -t: put timestamps before each input line logged (these are put in
1134 1135 comments)."""
1135 1136
1136 1137 opts,par = self.parse_options(parameter_s,'ort')
1137 1138 log_output = 'o' in opts
1138 1139 log_raw_input = 'r' in opts
1139 1140 timestamp = 't' in opts
1140 1141
1141 1142 logger = self.shell.logger
1142 1143
1143 1144 # if no args are given, the defaults set in the logger constructor by
1144 1145 # ipytohn remain valid
1145 1146 if par:
1146 1147 try:
1147 1148 logfname,logmode = par.split()
1148 1149 except:
1149 1150 logfname = par
1150 1151 logmode = 'backup'
1151 1152 else:
1152 1153 logfname = logger.logfname
1153 1154 logmode = logger.logmode
1154 1155 # put logfname into rc struct as if it had been called on the command
1155 1156 # line, so it ends up saved in the log header Save it in case we need
1156 1157 # to restore it...
1157 1158 old_logfile = self.shell.logfile
1158 1159 if logfname:
1159 1160 logfname = os.path.expanduser(logfname)
1160 1161 self.shell.logfile = logfname
1161 1162
1162 1163 loghead = '# IPython log file\n\n'
1163 1164 try:
1164 1165 started = logger.logstart(logfname,loghead,logmode,
1165 1166 log_output,timestamp,log_raw_input)
1166 1167 except:
1167 1168 self.shell.logfile = old_logfile
1168 1169 warn("Couldn't start log: %s" % sys.exc_info()[1])
1169 1170 else:
1170 1171 # log input history up to this point, optionally interleaving
1171 1172 # output if requested
1172 1173
1173 1174 if timestamp:
1174 1175 # disable timestamping for the previous history, since we've
1175 1176 # lost those already (no time machine here).
1176 1177 logger.timestamp = False
1177 1178
1178 1179 if log_raw_input:
1179 1180 input_hist = self.shell.history_manager.input_hist_raw
1180 1181 else:
1181 1182 input_hist = self.shell.history_manager.input_hist_parsed
1182 1183
1183 1184 if log_output:
1184 1185 log_write = logger.log_write
1185 1186 output_hist = self.shell.history_manager.output_hist
1186 1187 for n in range(1,len(input_hist)-1):
1187 1188 log_write(input_hist[n].rstrip() + '\n')
1188 1189 if n in output_hist:
1189 1190 log_write(repr(output_hist[n]),'output')
1190 1191 else:
1191 1192 logger.log_write('\n'.join(input_hist[1:]))
1192 1193 logger.log_write('\n')
1193 1194 if timestamp:
1194 1195 # re-enable timestamping
1195 1196 logger.timestamp = True
1196 1197
1197 1198 print ('Activating auto-logging. '
1198 1199 'Current session state plus future input saved.')
1199 1200 logger.logstate()
1200 1201
1201 1202 def magic_logstop(self,parameter_s=''):
1202 1203 """Fully stop logging and close log file.
1203 1204
1204 1205 In order to start logging again, a new %logstart call needs to be made,
1205 1206 possibly (though not necessarily) with a new filename, mode and other
1206 1207 options."""
1207 1208 self.logger.logstop()
1208 1209
1209 1210 def magic_logoff(self,parameter_s=''):
1210 1211 """Temporarily stop logging.
1211 1212
1212 1213 You must have previously started logging."""
1213 1214 self.shell.logger.switch_log(0)
1214 1215
1215 1216 def magic_logon(self,parameter_s=''):
1216 1217 """Restart logging.
1217 1218
1218 1219 This function is for restarting logging which you've temporarily
1219 1220 stopped with %logoff. For starting logging for the first time, you
1220 1221 must use the %logstart function, which allows you to specify an
1221 1222 optional log filename."""
1222 1223
1223 1224 self.shell.logger.switch_log(1)
1224 1225
1225 1226 def magic_logstate(self,parameter_s=''):
1226 1227 """Print the status of the logging system."""
1227 1228
1228 1229 self.shell.logger.logstate()
1229 1230
1230 1231 def magic_pdb(self, parameter_s=''):
1231 1232 """Control the automatic calling of the pdb interactive debugger.
1232 1233
1233 1234 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1234 1235 argument it works as a toggle.
1235 1236
1236 1237 When an exception is triggered, IPython can optionally call the
1237 1238 interactive pdb debugger after the traceback printout. %pdb toggles
1238 1239 this feature on and off.
1239 1240
1240 1241 The initial state of this feature is set in your configuration
1241 1242 file (the option is ``InteractiveShell.pdb``).
1242 1243
1243 1244 If you want to just activate the debugger AFTER an exception has fired,
1244 1245 without having to type '%pdb on' and rerunning your code, you can use
1245 1246 the %debug magic."""
1246 1247
1247 1248 par = parameter_s.strip().lower()
1248 1249
1249 1250 if par:
1250 1251 try:
1251 1252 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1252 1253 except KeyError:
1253 1254 print ('Incorrect argument. Use on/1, off/0, '
1254 1255 'or nothing for a toggle.')
1255 1256 return
1256 1257 else:
1257 1258 # toggle
1258 1259 new_pdb = not self.shell.call_pdb
1259 1260
1260 1261 # set on the shell
1261 1262 self.shell.call_pdb = new_pdb
1262 1263 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1263 1264
1264 1265 def magic_debug(self, parameter_s=''):
1265 1266 """Activate the interactive debugger in post-mortem mode.
1266 1267
1267 1268 If an exception has just occurred, this lets you inspect its stack
1268 1269 frames interactively. Note that this will always work only on the last
1269 1270 traceback that occurred, so you must call this quickly after an
1270 1271 exception that you wish to inspect has fired, because if another one
1271 1272 occurs, it clobbers the previous one.
1272 1273
1273 1274 If you want IPython to automatically do this on every exception, see
1274 1275 the %pdb magic for more details.
1275 1276 """
1276 1277 self.shell.debugger(force=True)
1277 1278
1278 1279 @skip_doctest
1279 1280 def magic_prun(self, parameter_s ='',user_mode=1,
1280 1281 opts=None,arg_lst=None,prog_ns=None):
1281 1282
1282 1283 """Run a statement through the python code profiler.
1283 1284
1284 1285 Usage:
1285 1286 %prun [options] statement
1286 1287
1287 1288 The given statement (which doesn't require quote marks) is run via the
1288 1289 python profiler in a manner similar to the profile.run() function.
1289 1290 Namespaces are internally managed to work correctly; profile.run
1290 1291 cannot be used in IPython because it makes certain assumptions about
1291 1292 namespaces which do not hold under IPython.
1292 1293
1293 1294 Options:
1294 1295
1295 1296 -l <limit>: you can place restrictions on what or how much of the
1296 1297 profile gets printed. The limit value can be:
1297 1298
1298 1299 * A string: only information for function names containing this string
1299 1300 is printed.
1300 1301
1301 1302 * An integer: only these many lines are printed.
1302 1303
1303 1304 * A float (between 0 and 1): this fraction of the report is printed
1304 1305 (for example, use a limit of 0.4 to see the topmost 40% only).
1305 1306
1306 1307 You can combine several limits with repeated use of the option. For
1307 1308 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1308 1309 information about class constructors.
1309 1310
1310 1311 -r: return the pstats.Stats object generated by the profiling. This
1311 1312 object has all the information about the profile in it, and you can
1312 1313 later use it for further analysis or in other functions.
1313 1314
1314 1315 -s <key>: sort profile by given key. You can provide more than one key
1315 1316 by using the option several times: '-s key1 -s key2 -s key3...'. The
1316 1317 default sorting key is 'time'.
1317 1318
1318 1319 The following is copied verbatim from the profile documentation
1319 1320 referenced below:
1320 1321
1321 1322 When more than one key is provided, additional keys are used as
1322 1323 secondary criteria when the there is equality in all keys selected
1323 1324 before them.
1324 1325
1325 1326 Abbreviations can be used for any key names, as long as the
1326 1327 abbreviation is unambiguous. The following are the keys currently
1327 1328 defined:
1328 1329
1329 1330 Valid Arg Meaning
1330 1331 "calls" call count
1331 1332 "cumulative" cumulative time
1332 1333 "file" file name
1333 1334 "module" file name
1334 1335 "pcalls" primitive call count
1335 1336 "line" line number
1336 1337 "name" function name
1337 1338 "nfl" name/file/line
1338 1339 "stdname" standard name
1339 1340 "time" internal time
1340 1341
1341 1342 Note that all sorts on statistics are in descending order (placing
1342 1343 most time consuming items first), where as name, file, and line number
1343 1344 searches are in ascending order (i.e., alphabetical). The subtle
1344 1345 distinction between "nfl" and "stdname" is that the standard name is a
1345 1346 sort of the name as printed, which means that the embedded line
1346 1347 numbers get compared in an odd way. For example, lines 3, 20, and 40
1347 1348 would (if the file names were the same) appear in the string order
1348 1349 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1349 1350 line numbers. In fact, sort_stats("nfl") is the same as
1350 1351 sort_stats("name", "file", "line").
1351 1352
1352 1353 -T <filename>: save profile results as shown on screen to a text
1353 1354 file. The profile is still shown on screen.
1354 1355
1355 1356 -D <filename>: save (via dump_stats) profile statistics to given
1356 1357 filename. This data is in a format understod by the pstats module, and
1357 1358 is generated by a call to the dump_stats() method of profile
1358 1359 objects. The profile is still shown on screen.
1359 1360
1360 1361 If you want to run complete programs under the profiler's control, use
1361 1362 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1362 1363 contains profiler specific options as described here.
1363 1364
1364 1365 You can read the complete documentation for the profile module with::
1365 1366
1366 1367 In [1]: import profile; profile.help()
1367 1368 """
1368 1369
1369 1370 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1370 1371 # protect user quote marks
1371 1372 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1372 1373
1373 1374 if user_mode: # regular user call
1374 1375 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1375 1376 list_all=1)
1376 1377 namespace = self.shell.user_ns
1377 1378 else: # called to run a program by %run -p
1378 1379 try:
1379 1380 filename = get_py_filename(arg_lst[0])
1380 1381 except IOError as e:
1381 1382 try:
1382 1383 msg = str(e)
1383 1384 except UnicodeError:
1384 1385 msg = e.message
1385 1386 error(msg)
1386 1387 return
1387 1388
1388 1389 arg_str = 'execfile(filename,prog_ns)'
1389 1390 namespace = {
1390 1391 'execfile': self.shell.safe_execfile,
1391 1392 'prog_ns': prog_ns,
1392 1393 'filename': filename
1393 1394 }
1394 1395
1395 1396 opts.merge(opts_def)
1396 1397
1397 1398 prof = profile.Profile()
1398 1399 try:
1399 1400 prof = prof.runctx(arg_str,namespace,namespace)
1400 1401 sys_exit = ''
1401 1402 except SystemExit:
1402 1403 sys_exit = """*** SystemExit exception caught in code being profiled."""
1403 1404
1404 1405 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1405 1406
1406 1407 lims = opts.l
1407 1408 if lims:
1408 1409 lims = [] # rebuild lims with ints/floats/strings
1409 1410 for lim in opts.l:
1410 1411 try:
1411 1412 lims.append(int(lim))
1412 1413 except ValueError:
1413 1414 try:
1414 1415 lims.append(float(lim))
1415 1416 except ValueError:
1416 1417 lims.append(lim)
1417 1418
1418 1419 # Trap output.
1419 1420 stdout_trap = StringIO()
1420 1421
1421 1422 if hasattr(stats,'stream'):
1422 1423 # In newer versions of python, the stats object has a 'stream'
1423 1424 # attribute to write into.
1424 1425 stats.stream = stdout_trap
1425 1426 stats.print_stats(*lims)
1426 1427 else:
1427 1428 # For older versions, we manually redirect stdout during printing
1428 1429 sys_stdout = sys.stdout
1429 1430 try:
1430 1431 sys.stdout = stdout_trap
1431 1432 stats.print_stats(*lims)
1432 1433 finally:
1433 1434 sys.stdout = sys_stdout
1434 1435
1435 1436 output = stdout_trap.getvalue()
1436 1437 output = output.rstrip()
1437 1438
1438 1439 page.page(output)
1439 1440 print sys_exit,
1440 1441
1441 1442 dump_file = opts.D[0]
1442 1443 text_file = opts.T[0]
1443 1444 if dump_file:
1444 1445 dump_file = unquote_filename(dump_file)
1445 1446 prof.dump_stats(dump_file)
1446 1447 print '\n*** Profile stats marshalled to file',\
1447 1448 `dump_file`+'.',sys_exit
1448 1449 if text_file:
1449 1450 text_file = unquote_filename(text_file)
1450 1451 pfile = file(text_file,'w')
1451 1452 pfile.write(output)
1452 1453 pfile.close()
1453 1454 print '\n*** Profile printout saved to text file',\
1454 1455 `text_file`+'.',sys_exit
1455 1456
1456 1457 if opts.has_key('r'):
1457 1458 return stats
1458 1459 else:
1459 1460 return None
1460 1461
1461 1462 @skip_doctest
1462 1463 def magic_run(self, parameter_s ='', runner=None,
1463 1464 file_finder=get_py_filename):
1464 1465 """Run the named file inside IPython as a program.
1465 1466
1466 1467 Usage:\\
1467 1468 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1468 1469
1469 1470 Parameters after the filename are passed as command-line arguments to
1470 1471 the program (put in sys.argv). Then, control returns to IPython's
1471 1472 prompt.
1472 1473
1473 1474 This is similar to running at a system prompt:\\
1474 1475 $ python file args\\
1475 1476 but with the advantage of giving you IPython's tracebacks, and of
1476 1477 loading all variables into your interactive namespace for further use
1477 1478 (unless -p is used, see below).
1478 1479
1479 1480 The file is executed in a namespace initially consisting only of
1480 1481 __name__=='__main__' and sys.argv constructed as indicated. It thus
1481 1482 sees its environment as if it were being run as a stand-alone program
1482 1483 (except for sharing global objects such as previously imported
1483 1484 modules). But after execution, the IPython interactive namespace gets
1484 1485 updated with all variables defined in the program (except for __name__
1485 1486 and sys.argv). This allows for very convenient loading of code for
1486 1487 interactive work, while giving each program a 'clean sheet' to run in.
1487 1488
1488 1489 Options:
1489 1490
1490 1491 -n: __name__ is NOT set to '__main__', but to the running file's name
1491 1492 without extension (as python does under import). This allows running
1492 1493 scripts and reloading the definitions in them without calling code
1493 1494 protected by an ' if __name__ == "__main__" ' clause.
1494 1495
1495 1496 -i: run the file in IPython's namespace instead of an empty one. This
1496 1497 is useful if you are experimenting with code written in a text editor
1497 1498 which depends on variables defined interactively.
1498 1499
1499 1500 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1500 1501 being run. This is particularly useful if IPython is being used to
1501 1502 run unittests, which always exit with a sys.exit() call. In such
1502 1503 cases you are interested in the output of the test results, not in
1503 1504 seeing a traceback of the unittest module.
1504 1505
1505 1506 -t: print timing information at the end of the run. IPython will give
1506 1507 you an estimated CPU time consumption for your script, which under
1507 1508 Unix uses the resource module to avoid the wraparound problems of
1508 1509 time.clock(). Under Unix, an estimate of time spent on system tasks
1509 1510 is also given (for Windows platforms this is reported as 0.0).
1510 1511
1511 1512 If -t is given, an additional -N<N> option can be given, where <N>
1512 1513 must be an integer indicating how many times you want the script to
1513 1514 run. The final timing report will include total and per run results.
1514 1515
1515 1516 For example (testing the script uniq_stable.py):
1516 1517
1517 1518 In [1]: run -t uniq_stable
1518 1519
1519 1520 IPython CPU timings (estimated):\\
1520 1521 User : 0.19597 s.\\
1521 1522 System: 0.0 s.\\
1522 1523
1523 1524 In [2]: run -t -N5 uniq_stable
1524 1525
1525 1526 IPython CPU timings (estimated):\\
1526 1527 Total runs performed: 5\\
1527 1528 Times : Total Per run\\
1528 1529 User : 0.910862 s, 0.1821724 s.\\
1529 1530 System: 0.0 s, 0.0 s.
1530 1531
1531 1532 -d: run your program under the control of pdb, the Python debugger.
1532 1533 This allows you to execute your program step by step, watch variables,
1533 1534 etc. Internally, what IPython does is similar to calling:
1534 1535
1535 1536 pdb.run('execfile("YOURFILENAME")')
1536 1537
1537 1538 with a breakpoint set on line 1 of your file. You can change the line
1538 1539 number for this automatic breakpoint to be <N> by using the -bN option
1539 1540 (where N must be an integer). For example:
1540 1541
1541 1542 %run -d -b40 myscript
1542 1543
1543 1544 will set the first breakpoint at line 40 in myscript.py. Note that
1544 1545 the first breakpoint must be set on a line which actually does
1545 1546 something (not a comment or docstring) for it to stop execution.
1546 1547
1547 1548 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1548 1549 first enter 'c' (without qoutes) to start execution up to the first
1549 1550 breakpoint.
1550 1551
1551 1552 Entering 'help' gives information about the use of the debugger. You
1552 1553 can easily see pdb's full documentation with "import pdb;pdb.help()"
1553 1554 at a prompt.
1554 1555
1555 1556 -p: run program under the control of the Python profiler module (which
1556 1557 prints a detailed report of execution times, function calls, etc).
1557 1558
1558 1559 You can pass other options after -p which affect the behavior of the
1559 1560 profiler itself. See the docs for %prun for details.
1560 1561
1561 1562 In this mode, the program's variables do NOT propagate back to the
1562 1563 IPython interactive namespace (because they remain in the namespace
1563 1564 where the profiler executes them).
1564 1565
1565 1566 Internally this triggers a call to %prun, see its documentation for
1566 1567 details on the options available specifically for profiling.
1567 1568
1568 1569 There is one special usage for which the text above doesn't apply:
1569 1570 if the filename ends with .ipy, the file is run as ipython script,
1570 1571 just as if the commands were written on IPython prompt.
1571 1572
1572 1573 -m: specify module name to load instead of script path. Similar to
1573 1574 the -m option for the python interpreter. Use this option last if you
1574 1575 want to combine with other %run options. Unlike the python interpreter
1575 1576 only source modules are allowed no .pyc or .pyo files.
1576 1577 For example:
1577 1578
1578 1579 %run -m example
1579 1580
1580 1581 will run the example module.
1581 1582
1582 1583 """
1583 1584
1584 1585 # get arguments and set sys.argv for program to be run.
1585 1586 opts, arg_lst = self.parse_options(parameter_s, 'nidtN:b:pD:l:rs:T:em:',
1586 1587 mode='list', list_all=1)
1587 1588 if "m" in opts:
1588 1589 modulename = opts["m"][0]
1589 1590 modpath = find_mod(modulename)
1590 1591 if modpath is None:
1591 1592 warn('%r is not a valid modulename on sys.path'%modulename)
1592 1593 return
1593 1594 arg_lst = [modpath] + arg_lst
1594 1595 try:
1595 1596 filename = file_finder(arg_lst[0])
1596 1597 except IndexError:
1597 1598 warn('you must provide at least a filename.')
1598 1599 print '\n%run:\n', oinspect.getdoc(self.magic_run)
1599 1600 return
1600 1601 except IOError as e:
1601 1602 try:
1602 1603 msg = str(e)
1603 1604 except UnicodeError:
1604 1605 msg = e.message
1605 1606 error(msg)
1606 1607 return
1607 1608
1608 1609 if filename.lower().endswith('.ipy'):
1609 1610 self.shell.safe_execfile_ipy(filename)
1610 1611 return
1611 1612
1612 1613 # Control the response to exit() calls made by the script being run
1613 1614 exit_ignore = 'e' in opts
1614 1615
1615 1616 # Make sure that the running script gets a proper sys.argv as if it
1616 1617 # were run from a system shell.
1617 1618 save_argv = sys.argv # save it for later restoring
1618 1619
1619 1620 # simulate shell expansion on arguments, at least tilde expansion
1620 1621 args = [ os.path.expanduser(a) for a in arg_lst[1:] ]
1621 1622
1622 1623 sys.argv = [filename] + args # put in the proper filename
1623 1624 # protect sys.argv from potential unicode strings on Python 2:
1624 1625 if not py3compat.PY3:
1625 1626 sys.argv = [ py3compat.cast_bytes(a) for a in sys.argv ]
1626 1627
1627 1628 if 'i' in opts:
1628 1629 # Run in user's interactive namespace
1629 1630 prog_ns = self.shell.user_ns
1630 1631 __name__save = self.shell.user_ns['__name__']
1631 1632 prog_ns['__name__'] = '__main__'
1632 1633 main_mod = self.shell.new_main_mod(prog_ns)
1633 1634 else:
1634 1635 # Run in a fresh, empty namespace
1635 1636 if 'n' in opts:
1636 1637 name = os.path.splitext(os.path.basename(filename))[0]
1637 1638 else:
1638 1639 name = '__main__'
1639 1640
1640 1641 main_mod = self.shell.new_main_mod()
1641 1642 prog_ns = main_mod.__dict__
1642 1643 prog_ns['__name__'] = name
1643 1644
1644 1645 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1645 1646 # set the __file__ global in the script's namespace
1646 1647 prog_ns['__file__'] = filename
1647 1648
1648 1649 # pickle fix. See interactiveshell for an explanation. But we need to make sure
1649 1650 # that, if we overwrite __main__, we replace it at the end
1650 1651 main_mod_name = prog_ns['__name__']
1651 1652
1652 1653 if main_mod_name == '__main__':
1653 1654 restore_main = sys.modules['__main__']
1654 1655 else:
1655 1656 restore_main = False
1656 1657
1657 1658 # This needs to be undone at the end to prevent holding references to
1658 1659 # every single object ever created.
1659 1660 sys.modules[main_mod_name] = main_mod
1660 1661
1661 1662 try:
1662 1663 stats = None
1663 1664 with self.readline_no_record:
1664 1665 if 'p' in opts:
1665 1666 stats = self.magic_prun('', 0, opts, arg_lst, prog_ns)
1666 1667 else:
1667 1668 if 'd' in opts:
1668 1669 deb = debugger.Pdb(self.shell.colors)
1669 1670 # reset Breakpoint state, which is moronically kept
1670 1671 # in a class
1671 1672 bdb.Breakpoint.next = 1
1672 1673 bdb.Breakpoint.bplist = {}
1673 1674 bdb.Breakpoint.bpbynumber = [None]
1674 1675 # Set an initial breakpoint to stop execution
1675 1676 maxtries = 10
1676 1677 bp = int(opts.get('b', [1])[0])
1677 1678 checkline = deb.checkline(filename, bp)
1678 1679 if not checkline:
1679 1680 for bp in range(bp + 1, bp + maxtries + 1):
1680 1681 if deb.checkline(filename, bp):
1681 1682 break
1682 1683 else:
1683 1684 msg = ("\nI failed to find a valid line to set "
1684 1685 "a breakpoint\n"
1685 1686 "after trying up to line: %s.\n"
1686 1687 "Please set a valid breakpoint manually "
1687 1688 "with the -b option." % bp)
1688 1689 error(msg)
1689 1690 return
1690 1691 # if we find a good linenumber, set the breakpoint
1691 1692 deb.do_break('%s:%s' % (filename, bp))
1692 1693 # Start file run
1693 1694 print "NOTE: Enter 'c' at the",
1694 1695 print "%s prompt to start your script." % deb.prompt
1695 1696 try:
1696 1697 deb.run('execfile("%s")' % filename, prog_ns)
1697 1698
1698 1699 except:
1699 1700 etype, value, tb = sys.exc_info()
1700 1701 # Skip three frames in the traceback: the %run one,
1701 1702 # one inside bdb.py, and the command-line typed by the
1702 1703 # user (run by exec in pdb itself).
1703 1704 self.shell.InteractiveTB(etype, value, tb, tb_offset=3)
1704 1705 else:
1705 1706 if runner is None:
1706 1707 runner = self.shell.safe_execfile
1707 1708 if 't' in opts:
1708 1709 # timed execution
1709 1710 try:
1710 1711 nruns = int(opts['N'][0])
1711 1712 if nruns < 1:
1712 1713 error('Number of runs must be >=1')
1713 1714 return
1714 1715 except (KeyError):
1715 1716 nruns = 1
1716 1717 twall0 = time.time()
1717 1718 if nruns == 1:
1718 1719 t0 = clock2()
1719 1720 runner(filename, prog_ns, prog_ns,
1720 1721 exit_ignore=exit_ignore)
1721 1722 t1 = clock2()
1722 1723 t_usr = t1[0] - t0[0]
1723 1724 t_sys = t1[1] - t0[1]
1724 1725 print "\nIPython CPU timings (estimated):"
1725 1726 print " User : %10.2f s." % t_usr
1726 1727 print " System : %10.2f s." % t_sys
1727 1728 else:
1728 1729 runs = range(nruns)
1729 1730 t0 = clock2()
1730 1731 for nr in runs:
1731 1732 runner(filename, prog_ns, prog_ns,
1732 1733 exit_ignore=exit_ignore)
1733 1734 t1 = clock2()
1734 1735 t_usr = t1[0] - t0[0]
1735 1736 t_sys = t1[1] - t0[1]
1736 1737 print "\nIPython CPU timings (estimated):"
1737 1738 print "Total runs performed:", nruns
1738 1739 print " Times : %10.2f %10.2f" % ('Total', 'Per run')
1739 1740 print " User : %10.2f s, %10.2f s." % (t_usr, t_usr / nruns)
1740 1741 print " System : %10.2f s, %10.2f s." % (t_sys, t_sys / nruns)
1741 1742 twall1 = time.time()
1742 1743 print "Wall time: %10.2f s." % (twall1 - twall0)
1743 1744
1744 1745 else:
1745 1746 # regular execution
1746 1747 runner(filename, prog_ns, prog_ns, exit_ignore=exit_ignore)
1747 1748
1748 1749 if 'i' in opts:
1749 1750 self.shell.user_ns['__name__'] = __name__save
1750 1751 else:
1751 1752 # The shell MUST hold a reference to prog_ns so after %run
1752 1753 # exits, the python deletion mechanism doesn't zero it out
1753 1754 # (leaving dangling references).
1754 1755 self.shell.cache_main_mod(prog_ns, filename)
1755 1756 # update IPython interactive namespace
1756 1757
1757 1758 # Some forms of read errors on the file may mean the
1758 1759 # __name__ key was never set; using pop we don't have to
1759 1760 # worry about a possible KeyError.
1760 1761 prog_ns.pop('__name__', None)
1761 1762
1762 1763 self.shell.user_ns.update(prog_ns)
1763 1764 finally:
1764 1765 # It's a bit of a mystery why, but __builtins__ can change from
1765 1766 # being a module to becoming a dict missing some key data after
1766 1767 # %run. As best I can see, this is NOT something IPython is doing
1767 1768 # at all, and similar problems have been reported before:
1768 1769 # http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-10/0188.html
1769 1770 # Since this seems to be done by the interpreter itself, the best
1770 1771 # we can do is to at least restore __builtins__ for the user on
1771 1772 # exit.
1772 1773 self.shell.user_ns['__builtins__'] = builtin_mod
1773 1774
1774 1775 # Ensure key global structures are restored
1775 1776 sys.argv = save_argv
1776 1777 if restore_main:
1777 1778 sys.modules['__main__'] = restore_main
1778 1779 else:
1779 1780 # Remove from sys.modules the reference to main_mod we'd
1780 1781 # added. Otherwise it will trap references to objects
1781 1782 # contained therein.
1782 1783 del sys.modules[main_mod_name]
1783 1784
1784 1785 return stats
1785 1786
1786 1787 @skip_doctest
1787 1788 def magic_timeit(self, parameter_s =''):
1788 1789 """Time execution of a Python statement or expression
1789 1790
1790 1791 Usage:\\
1791 1792 %timeit [-n<N> -r<R> [-t|-c]] statement
1792 1793
1793 1794 Time execution of a Python statement or expression using the timeit
1794 1795 module.
1795 1796
1796 1797 Options:
1797 1798 -n<N>: execute the given statement <N> times in a loop. If this value
1798 1799 is not given, a fitting value is chosen.
1799 1800
1800 1801 -r<R>: repeat the loop iteration <R> times and take the best result.
1801 1802 Default: 3
1802 1803
1803 1804 -t: use time.time to measure the time, which is the default on Unix.
1804 1805 This function measures wall time.
1805 1806
1806 1807 -c: use time.clock to measure the time, which is the default on
1807 1808 Windows and measures wall time. On Unix, resource.getrusage is used
1808 1809 instead and returns the CPU user time.
1809 1810
1810 1811 -p<P>: use a precision of <P> digits to display the timing result.
1811 1812 Default: 3
1812 1813
1813 1814
1814 1815 Examples:
1815 1816
1816 1817 In [1]: %timeit pass
1817 1818 10000000 loops, best of 3: 53.3 ns per loop
1818 1819
1819 1820 In [2]: u = None
1820 1821
1821 1822 In [3]: %timeit u is None
1822 1823 10000000 loops, best of 3: 184 ns per loop
1823 1824
1824 1825 In [4]: %timeit -r 4 u == None
1825 1826 1000000 loops, best of 4: 242 ns per loop
1826 1827
1827 1828 In [5]: import time
1828 1829
1829 1830 In [6]: %timeit -n1 time.sleep(2)
1830 1831 1 loops, best of 3: 2 s per loop
1831 1832
1832 1833
1833 1834 The times reported by %timeit will be slightly higher than those
1834 1835 reported by the timeit.py script when variables are accessed. This is
1835 1836 due to the fact that %timeit executes the statement in the namespace
1836 1837 of the shell, compared with timeit.py, which uses a single setup
1837 1838 statement to import function or create variables. Generally, the bias
1838 1839 does not matter as long as results from timeit.py are not mixed with
1839 1840 those from %timeit."""
1840 1841
1841 1842 import timeit
1842 1843 import math
1843 1844
1844 1845 # XXX: Unfortunately the unicode 'micro' symbol can cause problems in
1845 1846 # certain terminals. Until we figure out a robust way of
1846 1847 # auto-detecting if the terminal can deal with it, use plain 'us' for
1847 1848 # microseconds. I am really NOT happy about disabling the proper
1848 1849 # 'micro' prefix, but crashing is worse... If anyone knows what the
1849 1850 # right solution for this is, I'm all ears...
1850 1851 #
1851 1852 # Note: using
1852 1853 #
1853 1854 # s = u'\xb5'
1854 1855 # s.encode(sys.getdefaultencoding())
1855 1856 #
1856 1857 # is not sufficient, as I've seen terminals where that fails but
1857 1858 # print s
1858 1859 #
1859 1860 # succeeds
1860 1861 #
1861 1862 # See bug: https://bugs.launchpad.net/ipython/+bug/348466
1862 1863
1863 1864 #units = [u"s", u"ms",u'\xb5',"ns"]
1864 1865 units = [u"s", u"ms",u'us',"ns"]
1865 1866
1866 1867 scaling = [1, 1e3, 1e6, 1e9]
1867 1868
1868 1869 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1869 1870 posix=False)
1870 1871 if stmt == "":
1871 1872 return
1872 1873 timefunc = timeit.default_timer
1873 1874 number = int(getattr(opts, "n", 0))
1874 1875 repeat = int(getattr(opts, "r", timeit.default_repeat))
1875 1876 precision = int(getattr(opts, "p", 3))
1876 1877 if hasattr(opts, "t"):
1877 1878 timefunc = time.time
1878 1879 if hasattr(opts, "c"):
1879 1880 timefunc = clock
1880 1881
1881 1882 timer = timeit.Timer(timer=timefunc)
1882 1883 # this code has tight coupling to the inner workings of timeit.Timer,
1883 1884 # but is there a better way to achieve that the code stmt has access
1884 1885 # to the shell namespace?
1885 1886
1886 1887 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1887 1888 'setup': "pass"}
1888 1889 # Track compilation time so it can be reported if too long
1889 1890 # Minimum time above which compilation time will be reported
1890 1891 tc_min = 0.1
1891 1892
1892 1893 t0 = clock()
1893 1894 code = compile(src, "<magic-timeit>", "exec")
1894 1895 tc = clock()-t0
1895 1896
1896 1897 ns = {}
1897 1898 exec code in self.shell.user_ns, ns
1898 1899 timer.inner = ns["inner"]
1899 1900
1900 1901 if number == 0:
1901 1902 # determine number so that 0.2 <= total time < 2.0
1902 1903 number = 1
1903 1904 for i in range(1, 10):
1904 1905 if timer.timeit(number) >= 0.2:
1905 1906 break
1906 1907 number *= 10
1907 1908
1908 1909 best = min(timer.repeat(repeat, number)) / number
1909 1910
1910 1911 if best > 0.0 and best < 1000.0:
1911 1912 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1912 1913 elif best >= 1000.0:
1913 1914 order = 0
1914 1915 else:
1915 1916 order = 3
1916 1917 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1917 1918 precision,
1918 1919 best * scaling[order],
1919 1920 units[order])
1920 1921 if tc > tc_min:
1921 1922 print "Compiler time: %.2f s" % tc
1922 1923
1923 1924 @skip_doctest
1924 1925 @needs_local_scope
1925 1926 def magic_time(self,parameter_s = ''):
1926 1927 """Time execution of a Python statement or expression.
1927 1928
1928 1929 The CPU and wall clock times are printed, and the value of the
1929 1930 expression (if any) is returned. Note that under Win32, system time
1930 1931 is always reported as 0, since it can not be measured.
1931 1932
1932 1933 This function provides very basic timing functionality. In Python
1933 1934 2.3, the timeit module offers more control and sophistication, so this
1934 1935 could be rewritten to use it (patches welcome).
1935 1936
1936 1937 Some examples:
1937 1938
1938 1939 In [1]: time 2**128
1939 1940 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1940 1941 Wall time: 0.00
1941 1942 Out[1]: 340282366920938463463374607431768211456L
1942 1943
1943 1944 In [2]: n = 1000000
1944 1945
1945 1946 In [3]: time sum(range(n))
1946 1947 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1947 1948 Wall time: 1.37
1948 1949 Out[3]: 499999500000L
1949 1950
1950 1951 In [4]: time print 'hello world'
1951 1952 hello world
1952 1953 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1953 1954 Wall time: 0.00
1954 1955
1955 1956 Note that the time needed by Python to compile the given expression
1956 1957 will be reported if it is more than 0.1s. In this example, the
1957 1958 actual exponentiation is done by Python at compilation time, so while
1958 1959 the expression can take a noticeable amount of time to compute, that
1959 1960 time is purely due to the compilation:
1960 1961
1961 1962 In [5]: time 3**9999;
1962 1963 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1963 1964 Wall time: 0.00 s
1964 1965
1965 1966 In [6]: time 3**999999;
1966 1967 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1967 1968 Wall time: 0.00 s
1968 1969 Compiler : 0.78 s
1969 1970 """
1970 1971
1971 1972 # fail immediately if the given expression can't be compiled
1972 1973
1973 1974 expr = self.shell.prefilter(parameter_s,False)
1974 1975
1975 1976 # Minimum time above which compilation time will be reported
1976 1977 tc_min = 0.1
1977 1978
1978 1979 try:
1979 1980 mode = 'eval'
1980 1981 t0 = clock()
1981 1982 code = compile(expr,'<timed eval>',mode)
1982 1983 tc = clock()-t0
1983 1984 except SyntaxError:
1984 1985 mode = 'exec'
1985 1986 t0 = clock()
1986 1987 code = compile(expr,'<timed exec>',mode)
1987 1988 tc = clock()-t0
1988 1989 # skew measurement as little as possible
1989 1990 glob = self.shell.user_ns
1990 1991 locs = self._magic_locals
1991 1992 clk = clock2
1992 1993 wtime = time.time
1993 1994 # time execution
1994 1995 wall_st = wtime()
1995 1996 if mode=='eval':
1996 1997 st = clk()
1997 1998 out = eval(code, glob, locs)
1998 1999 end = clk()
1999 2000 else:
2000 2001 st = clk()
2001 2002 exec code in glob, locs
2002 2003 end = clk()
2003 2004 out = None
2004 2005 wall_end = wtime()
2005 2006 # Compute actual times and report
2006 2007 wall_time = wall_end-wall_st
2007 2008 cpu_user = end[0]-st[0]
2008 2009 cpu_sys = end[1]-st[1]
2009 2010 cpu_tot = cpu_user+cpu_sys
2010 2011 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
2011 2012 (cpu_user,cpu_sys,cpu_tot)
2012 2013 print "Wall time: %.2f s" % wall_time
2013 2014 if tc > tc_min:
2014 2015 print "Compiler : %.2f s" % tc
2015 2016 return out
2016 2017
2017 2018 @skip_doctest
2018 2019 def magic_macro(self,parameter_s = ''):
2019 2020 """Define a macro for future re-execution. It accepts ranges of history,
2020 2021 filenames or string objects.
2021 2022
2022 2023 Usage:\\
2023 2024 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
2024 2025
2025 2026 Options:
2026 2027
2027 2028 -r: use 'raw' input. By default, the 'processed' history is used,
2028 2029 so that magics are loaded in their transformed version to valid
2029 2030 Python. If this option is given, the raw input as typed as the
2030 2031 command line is used instead.
2031 2032
2032 2033 This will define a global variable called `name` which is a string
2033 2034 made of joining the slices and lines you specify (n1,n2,... numbers
2034 2035 above) from your input history into a single string. This variable
2035 2036 acts like an automatic function which re-executes those lines as if
2036 2037 you had typed them. You just type 'name' at the prompt and the code
2037 2038 executes.
2038 2039
2039 2040 The syntax for indicating input ranges is described in %history.
2040 2041
2041 2042 Note: as a 'hidden' feature, you can also use traditional python slice
2042 2043 notation, where N:M means numbers N through M-1.
2043 2044
2044 2045 For example, if your history contains (%hist prints it):
2045 2046
2046 2047 44: x=1
2047 2048 45: y=3
2048 2049 46: z=x+y
2049 2050 47: print x
2050 2051 48: a=5
2051 2052 49: print 'x',x,'y',y
2052 2053
2053 2054 you can create a macro with lines 44 through 47 (included) and line 49
2054 2055 called my_macro with:
2055 2056
2056 2057 In [55]: %macro my_macro 44-47 49
2057 2058
2058 2059 Now, typing `my_macro` (without quotes) will re-execute all this code
2059 2060 in one pass.
2060 2061
2061 2062 You don't need to give the line-numbers in order, and any given line
2062 2063 number can appear multiple times. You can assemble macros with any
2063 2064 lines from your input history in any order.
2064 2065
2065 2066 The macro is a simple object which holds its value in an attribute,
2066 2067 but IPython's display system checks for macros and executes them as
2067 2068 code instead of printing them when you type their name.
2068 2069
2069 2070 You can view a macro's contents by explicitly printing it with:
2070 2071
2071 2072 'print macro_name'.
2072 2073
2073 2074 """
2074 2075 opts,args = self.parse_options(parameter_s,'r',mode='list')
2075 2076 if not args: # List existing macros
2076 2077 return sorted(k for k,v in self.shell.user_ns.iteritems() if\
2077 2078 isinstance(v, Macro))
2078 2079 if len(args) == 1:
2079 2080 raise UsageError(
2080 2081 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2081 2082 name, codefrom = args[0], " ".join(args[1:])
2082 2083
2083 2084 #print 'rng',ranges # dbg
2084 2085 try:
2085 2086 lines = self.shell.find_user_code(codefrom, 'r' in opts)
2086 2087 except (ValueError, TypeError) as e:
2087 2088 print e.args[0]
2088 2089 return
2089 2090 macro = Macro(lines)
2090 2091 self.shell.define_macro(name, macro)
2091 2092 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2092 2093 print '=== Macro contents: ==='
2093 2094 print macro,
2094 2095
2095 2096 def magic_save(self,parameter_s = ''):
2096 2097 """Save a set of lines or a macro to a given filename.
2097 2098
2098 2099 Usage:\\
2099 2100 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
2100 2101
2101 2102 Options:
2102 2103
2103 2104 -r: use 'raw' input. By default, the 'processed' history is used,
2104 2105 so that magics are loaded in their transformed version to valid
2105 2106 Python. If this option is given, the raw input as typed as the
2106 2107 command line is used instead.
2107 2108
2108 2109 This function uses the same syntax as %history for input ranges,
2109 2110 then saves the lines to the filename you specify.
2110 2111
2111 2112 It adds a '.py' extension to the file if you don't do so yourself, and
2112 2113 it asks for confirmation before overwriting existing files."""
2113 2114
2114 2115 opts,args = self.parse_options(parameter_s,'r',mode='list')
2115 2116 fname, codefrom = unquote_filename(args[0]), " ".join(args[1:])
2116 2117 if not fname.endswith('.py'):
2117 2118 fname += '.py'
2118 2119 if os.path.isfile(fname):
2119 2120 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
2120 2121 if ans.lower() not in ['y','yes']:
2121 2122 print 'Operation cancelled.'
2122 2123 return
2123 2124 try:
2124 2125 cmds = self.shell.find_user_code(codefrom, 'r' in opts)
2125 2126 except (TypeError, ValueError) as e:
2126 2127 print e.args[0]
2127 2128 return
2128 2129 with py3compat.open(fname,'w', encoding="utf-8") as f:
2129 2130 f.write(u"# coding: utf-8\n")
2130 2131 f.write(py3compat.cast_unicode(cmds))
2131 2132 print 'The following commands were written to file `%s`:' % fname
2132 2133 print cmds
2133 2134
2134 2135 def magic_pastebin(self, parameter_s = ''):
2135 2136 """Upload code to the 'Lodge it' paste bin, returning the URL."""
2136 2137 try:
2137 2138 code = self.shell.find_user_code(parameter_s)
2138 2139 except (ValueError, TypeError) as e:
2139 2140 print e.args[0]
2140 2141 return
2141 2142 pbserver = ServerProxy('http://paste.pocoo.org/xmlrpc/')
2142 2143 id = pbserver.pastes.newPaste("python", code)
2143 2144 return "http://paste.pocoo.org/show/" + id
2144 2145
2145 2146 def magic_loadpy(self, arg_s):
2146 2147 """Load a .py python script into the GUI console.
2147 2148
2148 2149 This magic command can either take a local filename or a url::
2149 2150
2150 2151 %loadpy myscript.py
2151 2152 %loadpy http://www.example.com/myscript.py
2152 2153 """
2153 2154 arg_s = unquote_filename(arg_s)
2154 2155 if not arg_s.endswith('.py'):
2155 2156 raise ValueError('%%load only works with .py files: %s' % arg_s)
2156 2157 if arg_s.startswith('http'):
2157 2158 import urllib2
2158 2159 response = urllib2.urlopen(arg_s)
2159 2160 content = response.read()
2160 2161 else:
2161 2162 with open(arg_s) as f:
2162 2163 content = f.read()
2163 2164 self.set_next_input(content)
2164 2165
2165 2166 def _find_edit_target(self, args, opts, last_call):
2166 2167 """Utility method used by magic_edit to find what to edit."""
2167 2168
2168 2169 def make_filename(arg):
2169 2170 "Make a filename from the given args"
2170 2171 arg = unquote_filename(arg)
2171 2172 try:
2172 2173 filename = get_py_filename(arg)
2173 2174 except IOError:
2174 2175 # If it ends with .py but doesn't already exist, assume we want
2175 2176 # a new file.
2176 2177 if arg.endswith('.py'):
2177 2178 filename = arg
2178 2179 else:
2179 2180 filename = None
2180 2181 return filename
2181 2182
2182 2183 # Set a few locals from the options for convenience:
2183 2184 opts_prev = 'p' in opts
2184 2185 opts_raw = 'r' in opts
2185 2186
2186 2187 # custom exceptions
2187 2188 class DataIsObject(Exception): pass
2188 2189
2189 2190 # Default line number value
2190 2191 lineno = opts.get('n',None)
2191 2192
2192 2193 if opts_prev:
2193 2194 args = '_%s' % last_call[0]
2194 2195 if not self.shell.user_ns.has_key(args):
2195 2196 args = last_call[1]
2196 2197
2197 2198 # use last_call to remember the state of the previous call, but don't
2198 2199 # let it be clobbered by successive '-p' calls.
2199 2200 try:
2200 2201 last_call[0] = self.shell.displayhook.prompt_count
2201 2202 if not opts_prev:
2202 2203 last_call[1] = parameter_s
2203 2204 except:
2204 2205 pass
2205 2206
2206 2207 # by default this is done with temp files, except when the given
2207 2208 # arg is a filename
2208 2209 use_temp = True
2209 2210
2210 2211 data = ''
2211 2212
2212 2213 # First, see if the arguments should be a filename.
2213 2214 filename = make_filename(args)
2214 2215 if filename:
2215 2216 use_temp = False
2216 2217 elif args:
2217 2218 # Mode where user specifies ranges of lines, like in %macro.
2218 2219 data = self.extract_input_lines(args, opts_raw)
2219 2220 if not data:
2220 2221 try:
2221 2222 # Load the parameter given as a variable. If not a string,
2222 2223 # process it as an object instead (below)
2223 2224
2224 2225 #print '*** args',args,'type',type(args) # dbg
2225 2226 data = eval(args, self.shell.user_ns)
2226 2227 if not isinstance(data, basestring):
2227 2228 raise DataIsObject
2228 2229
2229 2230 except (NameError,SyntaxError):
2230 2231 # given argument is not a variable, try as a filename
2231 2232 filename = make_filename(args)
2232 2233 if filename is None:
2233 2234 warn("Argument given (%s) can't be found as a variable "
2234 2235 "or as a filename." % args)
2235 2236 return
2236 2237 use_temp = False
2237 2238
2238 2239 except DataIsObject:
2239 2240 # macros have a special edit function
2240 2241 if isinstance(data, Macro):
2241 2242 raise MacroToEdit(data)
2242 2243
2243 2244 # For objects, try to edit the file where they are defined
2244 2245 try:
2245 2246 filename = inspect.getabsfile(data)
2246 2247 if 'fakemodule' in filename.lower() and inspect.isclass(data):
2247 2248 # class created by %edit? Try to find source
2248 2249 # by looking for method definitions instead, the
2249 2250 # __module__ in those classes is FakeModule.
2250 2251 attrs = [getattr(data, aname) for aname in dir(data)]
2251 2252 for attr in attrs:
2252 2253 if not inspect.ismethod(attr):
2253 2254 continue
2254 2255 filename = inspect.getabsfile(attr)
2255 2256 if filename and 'fakemodule' not in filename.lower():
2256 2257 # change the attribute to be the edit target instead
2257 2258 data = attr
2258 2259 break
2259 2260
2260 2261 datafile = 1
2261 2262 except TypeError:
2262 2263 filename = make_filename(args)
2263 2264 datafile = 1
2264 2265 warn('Could not find file where `%s` is defined.\n'
2265 2266 'Opening a file named `%s`' % (args,filename))
2266 2267 # Now, make sure we can actually read the source (if it was in
2267 2268 # a temp file it's gone by now).
2268 2269 if datafile:
2269 2270 try:
2270 2271 if lineno is None:
2271 2272 lineno = inspect.getsourcelines(data)[1]
2272 2273 except IOError:
2273 2274 filename = make_filename(args)
2274 2275 if filename is None:
2275 2276 warn('The file `%s` where `%s` was defined cannot '
2276 2277 'be read.' % (filename,data))
2277 2278 return
2278 2279 use_temp = False
2279 2280
2280 2281 if use_temp:
2281 2282 filename = self.shell.mktempfile(data)
2282 2283 print 'IPython will make a temporary file named:',filename
2283 2284
2284 2285 return filename, lineno, use_temp
2285 2286
2286 2287 def _edit_macro(self,mname,macro):
2287 2288 """open an editor with the macro data in a file"""
2288 2289 filename = self.shell.mktempfile(macro.value)
2289 2290 self.shell.hooks.editor(filename)
2290 2291
2291 2292 # and make a new macro object, to replace the old one
2292 2293 mfile = open(filename)
2293 2294 mvalue = mfile.read()
2294 2295 mfile.close()
2295 2296 self.shell.user_ns[mname] = Macro(mvalue)
2296 2297
2297 2298 def magic_ed(self,parameter_s=''):
2298 2299 """Alias to %edit."""
2299 2300 return self.magic_edit(parameter_s)
2300 2301
2301 2302 @skip_doctest
2302 2303 def magic_edit(self,parameter_s='',last_call=['','']):
2303 2304 """Bring up an editor and execute the resulting code.
2304 2305
2305 2306 Usage:
2306 2307 %edit [options] [args]
2307 2308
2308 2309 %edit runs IPython's editor hook. The default version of this hook is
2309 2310 set to call the editor specified by your $EDITOR environment variable.
2310 2311 If this isn't found, it will default to vi under Linux/Unix and to
2311 2312 notepad under Windows. See the end of this docstring for how to change
2312 2313 the editor hook.
2313 2314
2314 2315 You can also set the value of this editor via the
2315 2316 ``TerminalInteractiveShell.editor`` option in your configuration file.
2316 2317 This is useful if you wish to use a different editor from your typical
2317 2318 default with IPython (and for Windows users who typically don't set
2318 2319 environment variables).
2319 2320
2320 2321 This command allows you to conveniently edit multi-line code right in
2321 2322 your IPython session.
2322 2323
2323 2324 If called without arguments, %edit opens up an empty editor with a
2324 2325 temporary file and will execute the contents of this file when you
2325 2326 close it (don't forget to save it!).
2326 2327
2327 2328
2328 2329 Options:
2329 2330
2330 2331 -n <number>: open the editor at a specified line number. By default,
2331 2332 the IPython editor hook uses the unix syntax 'editor +N filename', but
2332 2333 you can configure this by providing your own modified hook if your
2333 2334 favorite editor supports line-number specifications with a different
2334 2335 syntax.
2335 2336
2336 2337 -p: this will call the editor with the same data as the previous time
2337 2338 it was used, regardless of how long ago (in your current session) it
2338 2339 was.
2339 2340
2340 2341 -r: use 'raw' input. This option only applies to input taken from the
2341 2342 user's history. By default, the 'processed' history is used, so that
2342 2343 magics are loaded in their transformed version to valid Python. If
2343 2344 this option is given, the raw input as typed as the command line is
2344 2345 used instead. When you exit the editor, it will be executed by
2345 2346 IPython's own processor.
2346 2347
2347 2348 -x: do not execute the edited code immediately upon exit. This is
2348 2349 mainly useful if you are editing programs which need to be called with
2349 2350 command line arguments, which you can then do using %run.
2350 2351
2351 2352
2352 2353 Arguments:
2353 2354
2354 2355 If arguments are given, the following possibilites exist:
2355 2356
2356 2357 - If the argument is a filename, IPython will load that into the
2357 2358 editor. It will execute its contents with execfile() when you exit,
2358 2359 loading any code in the file into your interactive namespace.
2359 2360
2360 2361 - The arguments are ranges of input history, e.g. "7 ~1/4-6".
2361 2362 The syntax is the same as in the %history magic.
2362 2363
2363 2364 - If the argument is a string variable, its contents are loaded
2364 2365 into the editor. You can thus edit any string which contains
2365 2366 python code (including the result of previous edits).
2366 2367
2367 2368 - If the argument is the name of an object (other than a string),
2368 2369 IPython will try to locate the file where it was defined and open the
2369 2370 editor at the point where it is defined. You can use `%edit function`
2370 2371 to load an editor exactly at the point where 'function' is defined,
2371 2372 edit it and have the file be executed automatically.
2372 2373
2373 2374 - If the object is a macro (see %macro for details), this opens up your
2374 2375 specified editor with a temporary file containing the macro's data.
2375 2376 Upon exit, the macro is reloaded with the contents of the file.
2376 2377
2377 2378 Note: opening at an exact line is only supported under Unix, and some
2378 2379 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2379 2380 '+NUMBER' parameter necessary for this feature. Good editors like
2380 2381 (X)Emacs, vi, jed, pico and joe all do.
2381 2382
2382 2383 After executing your code, %edit will return as output the code you
2383 2384 typed in the editor (except when it was an existing file). This way
2384 2385 you can reload the code in further invocations of %edit as a variable,
2385 2386 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2386 2387 the output.
2387 2388
2388 2389 Note that %edit is also available through the alias %ed.
2389 2390
2390 2391 This is an example of creating a simple function inside the editor and
2391 2392 then modifying it. First, start up the editor:
2392 2393
2393 2394 In [1]: ed
2394 2395 Editing... done. Executing edited code...
2395 2396 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
2396 2397
2397 2398 We can then call the function foo():
2398 2399
2399 2400 In [2]: foo()
2400 2401 foo() was defined in an editing session
2401 2402
2402 2403 Now we edit foo. IPython automatically loads the editor with the
2403 2404 (temporary) file where foo() was previously defined:
2404 2405
2405 2406 In [3]: ed foo
2406 2407 Editing... done. Executing edited code...
2407 2408
2408 2409 And if we call foo() again we get the modified version:
2409 2410
2410 2411 In [4]: foo()
2411 2412 foo() has now been changed!
2412 2413
2413 2414 Here is an example of how to edit a code snippet successive
2414 2415 times. First we call the editor:
2415 2416
2416 2417 In [5]: ed
2417 2418 Editing... done. Executing edited code...
2418 2419 hello
2419 2420 Out[5]: "print 'hello'n"
2420 2421
2421 2422 Now we call it again with the previous output (stored in _):
2422 2423
2423 2424 In [6]: ed _
2424 2425 Editing... done. Executing edited code...
2425 2426 hello world
2426 2427 Out[6]: "print 'hello world'n"
2427 2428
2428 2429 Now we call it with the output #8 (stored in _8, also as Out[8]):
2429 2430
2430 2431 In [7]: ed _8
2431 2432 Editing... done. Executing edited code...
2432 2433 hello again
2433 2434 Out[7]: "print 'hello again'n"
2434 2435
2435 2436
2436 2437 Changing the default editor hook:
2437 2438
2438 2439 If you wish to write your own editor hook, you can put it in a
2439 2440 configuration file which you load at startup time. The default hook
2440 2441 is defined in the IPython.core.hooks module, and you can use that as a
2441 2442 starting example for further modifications. That file also has
2442 2443 general instructions on how to set a new hook for use once you've
2443 2444 defined it."""
2444 2445 opts,args = self.parse_options(parameter_s,'prxn:')
2445 2446
2446 2447 try:
2447 2448 filename, lineno, is_temp = self._find_edit_target(args, opts, last_call)
2448 2449 except MacroToEdit as e:
2449 2450 self._edit_macro(args, e.args[0])
2450 2451 return
2451 2452
2452 2453 # do actual editing here
2453 2454 print 'Editing...',
2454 2455 sys.stdout.flush()
2455 2456 try:
2456 2457 # Quote filenames that may have spaces in them
2457 2458 if ' ' in filename:
2458 2459 filename = "'%s'" % filename
2459 2460 self.shell.hooks.editor(filename,lineno)
2460 2461 except TryNext:
2461 2462 warn('Could not open editor')
2462 2463 return
2463 2464
2464 2465 # XXX TODO: should this be generalized for all string vars?
2465 2466 # For now, this is special-cased to blocks created by cpaste
2466 2467 if args.strip() == 'pasted_block':
2467 2468 self.shell.user_ns['pasted_block'] = file_read(filename)
2468 2469
2469 2470 if 'x' in opts: # -x prevents actual execution
2470 2471 print
2471 2472 else:
2472 2473 print 'done. Executing edited code...'
2473 2474 if 'r' in opts: # Untranslated IPython code
2474 2475 self.shell.run_cell(file_read(filename),
2475 2476 store_history=False)
2476 2477 else:
2477 2478 self.shell.safe_execfile(filename,self.shell.user_ns,
2478 2479 self.shell.user_ns)
2479 2480
2480 2481 if is_temp:
2481 2482 try:
2482 2483 return open(filename).read()
2483 2484 except IOError,msg:
2484 2485 if msg.filename == filename:
2485 2486 warn('File not found. Did you forget to save?')
2486 2487 return
2487 2488 else:
2488 2489 self.shell.showtraceback()
2489 2490
2490 2491 def magic_xmode(self,parameter_s = ''):
2491 2492 """Switch modes for the exception handlers.
2492 2493
2493 2494 Valid modes: Plain, Context and Verbose.
2494 2495
2495 2496 If called without arguments, acts as a toggle."""
2496 2497
2497 2498 def xmode_switch_err(name):
2498 2499 warn('Error changing %s exception modes.\n%s' %
2499 2500 (name,sys.exc_info()[1]))
2500 2501
2501 2502 shell = self.shell
2502 2503 new_mode = parameter_s.strip().capitalize()
2503 2504 try:
2504 2505 shell.InteractiveTB.set_mode(mode=new_mode)
2505 2506 print 'Exception reporting mode:',shell.InteractiveTB.mode
2506 2507 except:
2507 2508 xmode_switch_err('user')
2508 2509
2509 2510 def magic_colors(self,parameter_s = ''):
2510 2511 """Switch color scheme for prompts, info system and exception handlers.
2511 2512
2512 2513 Currently implemented schemes: NoColor, Linux, LightBG.
2513 2514
2514 2515 Color scheme names are not case-sensitive.
2515 2516
2516 2517 Examples
2517 2518 --------
2518 2519 To get a plain black and white terminal::
2519 2520
2520 2521 %colors nocolor
2521 2522 """
2522 2523
2523 2524 def color_switch_err(name):
2524 2525 warn('Error changing %s color schemes.\n%s' %
2525 2526 (name,sys.exc_info()[1]))
2526 2527
2527 2528
2528 2529 new_scheme = parameter_s.strip()
2529 2530 if not new_scheme:
2530 2531 raise UsageError(
2531 2532 "%colors: you must specify a color scheme. See '%colors?'")
2532 2533 return
2533 2534 # local shortcut
2534 2535 shell = self.shell
2535 2536
2536 2537 import IPython.utils.rlineimpl as readline
2537 2538
2538 2539 if not shell.colors_force and \
2539 2540 not readline.have_readline and sys.platform == "win32":
2540 2541 msg = """\
2541 2542 Proper color support under MS Windows requires the pyreadline library.
2542 2543 You can find it at:
2543 2544 http://ipython.org/pyreadline.html
2544 2545 Gary's readline needs the ctypes module, from:
2545 2546 http://starship.python.net/crew/theller/ctypes
2546 2547 (Note that ctypes is already part of Python versions 2.5 and newer).
2547 2548
2548 2549 Defaulting color scheme to 'NoColor'"""
2549 2550 new_scheme = 'NoColor'
2550 2551 warn(msg)
2551 2552
2552 2553 # readline option is 0
2553 2554 if not shell.colors_force and not shell.has_readline:
2554 2555 new_scheme = 'NoColor'
2555 2556
2556 2557 # Set prompt colors
2557 2558 try:
2558 2559 shell.displayhook.set_colors(new_scheme)
2559 2560 except:
2560 2561 color_switch_err('prompt')
2561 2562 else:
2562 2563 shell.colors = \
2563 2564 shell.displayhook.color_table.active_scheme_name
2564 2565 # Set exception colors
2565 2566 try:
2566 2567 shell.InteractiveTB.set_colors(scheme = new_scheme)
2567 2568 shell.SyntaxTB.set_colors(scheme = new_scheme)
2568 2569 except:
2569 2570 color_switch_err('exception')
2570 2571
2571 2572 # Set info (for 'object?') colors
2572 2573 if shell.color_info:
2573 2574 try:
2574 2575 shell.inspector.set_active_scheme(new_scheme)
2575 2576 except:
2576 2577 color_switch_err('object inspector')
2577 2578 else:
2578 2579 shell.inspector.set_active_scheme('NoColor')
2579 2580
2580 2581 def magic_pprint(self, parameter_s=''):
2581 2582 """Toggle pretty printing on/off."""
2582 2583 ptformatter = self.shell.display_formatter.formatters['text/plain']
2583 2584 ptformatter.pprint = bool(1 - ptformatter.pprint)
2584 2585 print 'Pretty printing has been turned', \
2585 2586 ['OFF','ON'][ptformatter.pprint]
2586 2587
2587 2588 #......................................................................
2588 2589 # Functions to implement unix shell-type things
2589 2590
2590 2591 @skip_doctest
2591 2592 def magic_alias(self, parameter_s = ''):
2592 2593 """Define an alias for a system command.
2593 2594
2594 2595 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2595 2596
2596 2597 Then, typing 'alias_name params' will execute the system command 'cmd
2597 2598 params' (from your underlying operating system).
2598 2599
2599 2600 Aliases have lower precedence than magic functions and Python normal
2600 2601 variables, so if 'foo' is both a Python variable and an alias, the
2601 2602 alias can not be executed until 'del foo' removes the Python variable.
2602 2603
2603 2604 You can use the %l specifier in an alias definition to represent the
2604 2605 whole line when the alias is called. For example:
2605 2606
2606 2607 In [2]: alias bracket echo "Input in brackets: <%l>"
2607 2608 In [3]: bracket hello world
2608 2609 Input in brackets: <hello world>
2609 2610
2610 2611 You can also define aliases with parameters using %s specifiers (one
2611 2612 per parameter):
2612 2613
2613 2614 In [1]: alias parts echo first %s second %s
2614 2615 In [2]: %parts A B
2615 2616 first A second B
2616 2617 In [3]: %parts A
2617 2618 Incorrect number of arguments: 2 expected.
2618 2619 parts is an alias to: 'echo first %s second %s'
2619 2620
2620 2621 Note that %l and %s are mutually exclusive. You can only use one or
2621 2622 the other in your aliases.
2622 2623
2623 2624 Aliases expand Python variables just like system calls using ! or !!
2624 2625 do: all expressions prefixed with '$' get expanded. For details of
2625 2626 the semantic rules, see PEP-215:
2626 2627 http://www.python.org/peps/pep-0215.html. This is the library used by
2627 2628 IPython for variable expansion. If you want to access a true shell
2628 2629 variable, an extra $ is necessary to prevent its expansion by IPython:
2629 2630
2630 2631 In [6]: alias show echo
2631 2632 In [7]: PATH='A Python string'
2632 2633 In [8]: show $PATH
2633 2634 A Python string
2634 2635 In [9]: show $$PATH
2635 2636 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2636 2637
2637 2638 You can use the alias facility to acess all of $PATH. See the %rehash
2638 2639 and %rehashx functions, which automatically create aliases for the
2639 2640 contents of your $PATH.
2640 2641
2641 2642 If called with no parameters, %alias prints the current alias table."""
2642 2643
2643 2644 par = parameter_s.strip()
2644 2645 if not par:
2645 2646 stored = self.db.get('stored_aliases', {} )
2646 2647 aliases = sorted(self.shell.alias_manager.aliases)
2647 2648 # for k, v in stored:
2648 2649 # atab.append(k, v[0])
2649 2650
2650 2651 print "Total number of aliases:", len(aliases)
2651 2652 sys.stdout.flush()
2652 2653 return aliases
2653 2654
2654 2655 # Now try to define a new one
2655 2656 try:
2656 2657 alias,cmd = par.split(None, 1)
2657 2658 except:
2658 2659 print oinspect.getdoc(self.magic_alias)
2659 2660 else:
2660 2661 self.shell.alias_manager.soft_define_alias(alias, cmd)
2661 2662 # end magic_alias
2662 2663
2663 2664 def magic_unalias(self, parameter_s = ''):
2664 2665 """Remove an alias"""
2665 2666
2666 2667 aname = parameter_s.strip()
2667 2668 self.shell.alias_manager.undefine_alias(aname)
2668 2669 stored = self.db.get('stored_aliases', {} )
2669 2670 if aname in stored:
2670 2671 print "Removing %stored alias",aname
2671 2672 del stored[aname]
2672 2673 self.db['stored_aliases'] = stored
2673 2674
2674 2675 def magic_rehashx(self, parameter_s = ''):
2675 2676 """Update the alias table with all executable files in $PATH.
2676 2677
2677 2678 This version explicitly checks that every entry in $PATH is a file
2678 2679 with execute access (os.X_OK), so it is much slower than %rehash.
2679 2680
2680 2681 Under Windows, it checks executability as a match agains a
2681 2682 '|'-separated string of extensions, stored in the IPython config
2682 2683 variable win_exec_ext. This defaults to 'exe|com|bat'.
2683 2684
2684 2685 This function also resets the root module cache of module completer,
2685 2686 used on slow filesystems.
2686 2687 """
2687 2688 from IPython.core.alias import InvalidAliasError
2688 2689
2689 2690 # for the benefit of module completer in ipy_completers.py
2690 2691 del self.db['rootmodules']
2691 2692
2692 2693 path = [os.path.abspath(os.path.expanduser(p)) for p in
2693 2694 os.environ.get('PATH','').split(os.pathsep)]
2694 2695 path = filter(os.path.isdir,path)
2695 2696
2696 2697 syscmdlist = []
2697 2698 # Now define isexec in a cross platform manner.
2698 2699 if os.name == 'posix':
2699 2700 isexec = lambda fname:os.path.isfile(fname) and \
2700 2701 os.access(fname,os.X_OK)
2701 2702 else:
2702 2703 try:
2703 2704 winext = os.environ['pathext'].replace(';','|').replace('.','')
2704 2705 except KeyError:
2705 2706 winext = 'exe|com|bat|py'
2706 2707 if 'py' not in winext:
2707 2708 winext += '|py'
2708 2709 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2709 2710 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2710 2711 savedir = os.getcwdu()
2711 2712
2712 2713 # Now walk the paths looking for executables to alias.
2713 2714 try:
2714 2715 # write the whole loop for posix/Windows so we don't have an if in
2715 2716 # the innermost part
2716 2717 if os.name == 'posix':
2717 2718 for pdir in path:
2718 2719 os.chdir(pdir)
2719 2720 for ff in os.listdir(pdir):
2720 2721 if isexec(ff):
2721 2722 try:
2722 2723 # Removes dots from the name since ipython
2723 2724 # will assume names with dots to be python.
2724 2725 self.shell.alias_manager.define_alias(
2725 2726 ff.replace('.',''), ff)
2726 2727 except InvalidAliasError:
2727 2728 pass
2728 2729 else:
2729 2730 syscmdlist.append(ff)
2730 2731 else:
2731 2732 no_alias = self.shell.alias_manager.no_alias
2732 2733 for pdir in path:
2733 2734 os.chdir(pdir)
2734 2735 for ff in os.listdir(pdir):
2735 2736 base, ext = os.path.splitext(ff)
2736 2737 if isexec(ff) and base.lower() not in no_alias:
2737 2738 if ext.lower() == '.exe':
2738 2739 ff = base
2739 2740 try:
2740 2741 # Removes dots from the name since ipython
2741 2742 # will assume names with dots to be python.
2742 2743 self.shell.alias_manager.define_alias(
2743 2744 base.lower().replace('.',''), ff)
2744 2745 except InvalidAliasError:
2745 2746 pass
2746 2747 syscmdlist.append(ff)
2747 2748 db = self.db
2748 2749 db['syscmdlist'] = syscmdlist
2749 2750 finally:
2750 2751 os.chdir(savedir)
2751 2752
2752 2753 @skip_doctest
2753 2754 def magic_pwd(self, parameter_s = ''):
2754 2755 """Return the current working directory path.
2755 2756
2756 2757 Examples
2757 2758 --------
2758 2759 ::
2759 2760
2760 2761 In [9]: pwd
2761 2762 Out[9]: '/home/tsuser/sprint/ipython'
2762 2763 """
2763 2764 return os.getcwdu()
2764 2765
2765 2766 @skip_doctest
2766 2767 def magic_cd(self, parameter_s=''):
2767 2768 """Change the current working directory.
2768 2769
2769 2770 This command automatically maintains an internal list of directories
2770 2771 you visit during your IPython session, in the variable _dh. The
2771 2772 command %dhist shows this history nicely formatted. You can also
2772 2773 do 'cd -<tab>' to see directory history conveniently.
2773 2774
2774 2775 Usage:
2775 2776
2776 2777 cd 'dir': changes to directory 'dir'.
2777 2778
2778 2779 cd -: changes to the last visited directory.
2779 2780
2780 2781 cd -<n>: changes to the n-th directory in the directory history.
2781 2782
2782 2783 cd --foo: change to directory that matches 'foo' in history
2783 2784
2784 2785 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2785 2786 (note: cd <bookmark_name> is enough if there is no
2786 2787 directory <bookmark_name>, but a bookmark with the name exists.)
2787 2788 'cd -b <tab>' allows you to tab-complete bookmark names.
2788 2789
2789 2790 Options:
2790 2791
2791 2792 -q: quiet. Do not print the working directory after the cd command is
2792 2793 executed. By default IPython's cd command does print this directory,
2793 2794 since the default prompts do not display path information.
2794 2795
2795 2796 Note that !cd doesn't work for this purpose because the shell where
2796 2797 !command runs is immediately discarded after executing 'command'.
2797 2798
2798 2799 Examples
2799 2800 --------
2800 2801 ::
2801 2802
2802 2803 In [10]: cd parent/child
2803 2804 /home/tsuser/parent/child
2804 2805 """
2805 2806
2806 2807 parameter_s = parameter_s.strip()
2807 2808 #bkms = self.shell.persist.get("bookmarks",{})
2808 2809
2809 2810 oldcwd = os.getcwdu()
2810 2811 numcd = re.match(r'(-)(\d+)$',parameter_s)
2811 2812 # jump in directory history by number
2812 2813 if numcd:
2813 2814 nn = int(numcd.group(2))
2814 2815 try:
2815 2816 ps = self.shell.user_ns['_dh'][nn]
2816 2817 except IndexError:
2817 2818 print 'The requested directory does not exist in history.'
2818 2819 return
2819 2820 else:
2820 2821 opts = {}
2821 2822 elif parameter_s.startswith('--'):
2822 2823 ps = None
2823 2824 fallback = None
2824 2825 pat = parameter_s[2:]
2825 2826 dh = self.shell.user_ns['_dh']
2826 2827 # first search only by basename (last component)
2827 2828 for ent in reversed(dh):
2828 2829 if pat in os.path.basename(ent) and os.path.isdir(ent):
2829 2830 ps = ent
2830 2831 break
2831 2832
2832 2833 if fallback is None and pat in ent and os.path.isdir(ent):
2833 2834 fallback = ent
2834 2835
2835 2836 # if we have no last part match, pick the first full path match
2836 2837 if ps is None:
2837 2838 ps = fallback
2838 2839
2839 2840 if ps is None:
2840 2841 print "No matching entry in directory history"
2841 2842 return
2842 2843 else:
2843 2844 opts = {}
2844 2845
2845 2846
2846 2847 else:
2847 2848 #turn all non-space-escaping backslashes to slashes,
2848 2849 # for c:\windows\directory\names\
2849 2850 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2850 2851 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2851 2852 # jump to previous
2852 2853 if ps == '-':
2853 2854 try:
2854 2855 ps = self.shell.user_ns['_dh'][-2]
2855 2856 except IndexError:
2856 2857 raise UsageError('%cd -: No previous directory to change to.')
2857 2858 # jump to bookmark if needed
2858 2859 else:
2859 2860 if not os.path.isdir(ps) or opts.has_key('b'):
2860 2861 bkms = self.db.get('bookmarks', {})
2861 2862
2862 2863 if bkms.has_key(ps):
2863 2864 target = bkms[ps]
2864 2865 print '(bookmark:%s) -> %s' % (ps,target)
2865 2866 ps = target
2866 2867 else:
2867 2868 if opts.has_key('b'):
2868 2869 raise UsageError("Bookmark '%s' not found. "
2869 2870 "Use '%%bookmark -l' to see your bookmarks." % ps)
2870 2871
2871 2872 # strip extra quotes on Windows, because os.chdir doesn't like them
2872 2873 ps = unquote_filename(ps)
2873 2874 # at this point ps should point to the target dir
2874 2875 if ps:
2875 2876 try:
2876 2877 os.chdir(os.path.expanduser(ps))
2877 2878 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2878 2879 set_term_title('IPython: ' + abbrev_cwd())
2879 2880 except OSError:
2880 2881 print sys.exc_info()[1]
2881 2882 else:
2882 2883 cwd = os.getcwdu()
2883 2884 dhist = self.shell.user_ns['_dh']
2884 2885 if oldcwd != cwd:
2885 2886 dhist.append(cwd)
2886 2887 self.db['dhist'] = compress_dhist(dhist)[-100:]
2887 2888
2888 2889 else:
2889 2890 os.chdir(self.shell.home_dir)
2890 2891 if hasattr(self.shell, 'term_title') and self.shell.term_title:
2891 2892 set_term_title('IPython: ' + '~')
2892 2893 cwd = os.getcwdu()
2893 2894 dhist = self.shell.user_ns['_dh']
2894 2895
2895 2896 if oldcwd != cwd:
2896 2897 dhist.append(cwd)
2897 2898 self.db['dhist'] = compress_dhist(dhist)[-100:]
2898 2899 if not 'q' in opts and self.shell.user_ns['_dh']:
2899 2900 print self.shell.user_ns['_dh'][-1]
2900 2901
2901 2902
2902 2903 def magic_env(self, parameter_s=''):
2903 2904 """List environment variables."""
2904 2905
2905 2906 return os.environ.data
2906 2907
2907 2908 def magic_pushd(self, parameter_s=''):
2908 2909 """Place the current dir on stack and change directory.
2909 2910
2910 2911 Usage:\\
2911 2912 %pushd ['dirname']
2912 2913 """
2913 2914
2914 2915 dir_s = self.shell.dir_stack
2915 2916 tgt = os.path.expanduser(unquote_filename(parameter_s))
2916 2917 cwd = os.getcwdu().replace(self.home_dir,'~')
2917 2918 if tgt:
2918 2919 self.magic_cd(parameter_s)
2919 2920 dir_s.insert(0,cwd)
2920 2921 return self.magic_dirs()
2921 2922
2922 2923 def magic_popd(self, parameter_s=''):
2923 2924 """Change to directory popped off the top of the stack.
2924 2925 """
2925 2926 if not self.shell.dir_stack:
2926 2927 raise UsageError("%popd on empty stack")
2927 2928 top = self.shell.dir_stack.pop(0)
2928 2929 self.magic_cd(top)
2929 2930 print "popd ->",top
2930 2931
2931 2932 def magic_dirs(self, parameter_s=''):
2932 2933 """Return the current directory stack."""
2933 2934
2934 2935 return self.shell.dir_stack
2935 2936
2936 2937 def magic_dhist(self, parameter_s=''):
2937 2938 """Print your history of visited directories.
2938 2939
2939 2940 %dhist -> print full history\\
2940 2941 %dhist n -> print last n entries only\\
2941 2942 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2942 2943
2943 2944 This history is automatically maintained by the %cd command, and
2944 2945 always available as the global list variable _dh. You can use %cd -<n>
2945 2946 to go to directory number <n>.
2946 2947
2947 2948 Note that most of time, you should view directory history by entering
2948 2949 cd -<TAB>.
2949 2950
2950 2951 """
2951 2952
2952 2953 dh = self.shell.user_ns['_dh']
2953 2954 if parameter_s:
2954 2955 try:
2955 2956 args = map(int,parameter_s.split())
2956 2957 except:
2957 2958 self.arg_err(Magic.magic_dhist)
2958 2959 return
2959 2960 if len(args) == 1:
2960 2961 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2961 2962 elif len(args) == 2:
2962 2963 ini,fin = args
2963 2964 else:
2964 2965 self.arg_err(Magic.magic_dhist)
2965 2966 return
2966 2967 else:
2967 2968 ini,fin = 0,len(dh)
2968 2969 nlprint(dh,
2969 2970 header = 'Directory history (kept in _dh)',
2970 2971 start=ini,stop=fin)
2971 2972
2972 2973 @skip_doctest
2973 2974 def magic_sc(self, parameter_s=''):
2974 2975 """Shell capture - execute a shell command and capture its output.
2975 2976
2976 2977 DEPRECATED. Suboptimal, retained for backwards compatibility.
2977 2978
2978 2979 You should use the form 'var = !command' instead. Example:
2979 2980
2980 2981 "%sc -l myfiles = ls ~" should now be written as
2981 2982
2982 2983 "myfiles = !ls ~"
2983 2984
2984 2985 myfiles.s, myfiles.l and myfiles.n still apply as documented
2985 2986 below.
2986 2987
2987 2988 --
2988 2989 %sc [options] varname=command
2989 2990
2990 2991 IPython will run the given command using commands.getoutput(), and
2991 2992 will then update the user's interactive namespace with a variable
2992 2993 called varname, containing the value of the call. Your command can
2993 2994 contain shell wildcards, pipes, etc.
2994 2995
2995 2996 The '=' sign in the syntax is mandatory, and the variable name you
2996 2997 supply must follow Python's standard conventions for valid names.
2997 2998
2998 2999 (A special format without variable name exists for internal use)
2999 3000
3000 3001 Options:
3001 3002
3002 3003 -l: list output. Split the output on newlines into a list before
3003 3004 assigning it to the given variable. By default the output is stored
3004 3005 as a single string.
3005 3006
3006 3007 -v: verbose. Print the contents of the variable.
3007 3008
3008 3009 In most cases you should not need to split as a list, because the
3009 3010 returned value is a special type of string which can automatically
3010 3011 provide its contents either as a list (split on newlines) or as a
3011 3012 space-separated string. These are convenient, respectively, either
3012 3013 for sequential processing or to be passed to a shell command.
3013 3014
3014 3015 For example:
3015 3016
3016 3017 # all-random
3017 3018
3018 3019 # Capture into variable a
3019 3020 In [1]: sc a=ls *py
3020 3021
3021 3022 # a is a string with embedded newlines
3022 3023 In [2]: a
3023 3024 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
3024 3025
3025 3026 # which can be seen as a list:
3026 3027 In [3]: a.l
3027 3028 Out[3]: ['setup.py', 'win32_manual_post_install.py']
3028 3029
3029 3030 # or as a whitespace-separated string:
3030 3031 In [4]: a.s
3031 3032 Out[4]: 'setup.py win32_manual_post_install.py'
3032 3033
3033 3034 # a.s is useful to pass as a single command line:
3034 3035 In [5]: !wc -l $a.s
3035 3036 146 setup.py
3036 3037 130 win32_manual_post_install.py
3037 3038 276 total
3038 3039
3039 3040 # while the list form is useful to loop over:
3040 3041 In [6]: for f in a.l:
3041 3042 ...: !wc -l $f
3042 3043 ...:
3043 3044 146 setup.py
3044 3045 130 win32_manual_post_install.py
3045 3046
3046 3047 Similiarly, the lists returned by the -l option are also special, in
3047 3048 the sense that you can equally invoke the .s attribute on them to
3048 3049 automatically get a whitespace-separated string from their contents:
3049 3050
3050 3051 In [7]: sc -l b=ls *py
3051 3052
3052 3053 In [8]: b
3053 3054 Out[8]: ['setup.py', 'win32_manual_post_install.py']
3054 3055
3055 3056 In [9]: b.s
3056 3057 Out[9]: 'setup.py win32_manual_post_install.py'
3057 3058
3058 3059 In summary, both the lists and strings used for ouptut capture have
3059 3060 the following special attributes:
3060 3061
3061 3062 .l (or .list) : value as list.
3062 3063 .n (or .nlstr): value as newline-separated string.
3063 3064 .s (or .spstr): value as space-separated string.
3064 3065 """
3065 3066
3066 3067 opts,args = self.parse_options(parameter_s,'lv')
3067 3068 # Try to get a variable name and command to run
3068 3069 try:
3069 3070 # the variable name must be obtained from the parse_options
3070 3071 # output, which uses shlex.split to strip options out.
3071 3072 var,_ = args.split('=',1)
3072 3073 var = var.strip()
3073 3074 # But the the command has to be extracted from the original input
3074 3075 # parameter_s, not on what parse_options returns, to avoid the
3075 3076 # quote stripping which shlex.split performs on it.
3076 3077 _,cmd = parameter_s.split('=',1)
3077 3078 except ValueError:
3078 3079 var,cmd = '',''
3079 3080 # If all looks ok, proceed
3080 3081 split = 'l' in opts
3081 3082 out = self.shell.getoutput(cmd, split=split)
3082 3083 if opts.has_key('v'):
3083 3084 print '%s ==\n%s' % (var,pformat(out))
3084 3085 if var:
3085 3086 self.shell.user_ns.update({var:out})
3086 3087 else:
3087 3088 return out
3088 3089
3089 3090 def magic_sx(self, parameter_s=''):
3090 3091 """Shell execute - run a shell command and capture its output.
3091 3092
3092 3093 %sx command
3093 3094
3094 3095 IPython will run the given command using commands.getoutput(), and
3095 3096 return the result formatted as a list (split on '\\n'). Since the
3096 3097 output is _returned_, it will be stored in ipython's regular output
3097 3098 cache Out[N] and in the '_N' automatic variables.
3098 3099
3099 3100 Notes:
3100 3101
3101 3102 1) If an input line begins with '!!', then %sx is automatically
3102 3103 invoked. That is, while:
3103 3104 !ls
3104 3105 causes ipython to simply issue system('ls'), typing
3105 3106 !!ls
3106 3107 is a shorthand equivalent to:
3107 3108 %sx ls
3108 3109
3109 3110 2) %sx differs from %sc in that %sx automatically splits into a list,
3110 3111 like '%sc -l'. The reason for this is to make it as easy as possible
3111 3112 to process line-oriented shell output via further python commands.
3112 3113 %sc is meant to provide much finer control, but requires more
3113 3114 typing.
3114 3115
3115 3116 3) Just like %sc -l, this is a list with special attributes:
3116 3117
3117 3118 .l (or .list) : value as list.
3118 3119 .n (or .nlstr): value as newline-separated string.
3119 3120 .s (or .spstr): value as whitespace-separated string.
3120 3121
3121 3122 This is very useful when trying to use such lists as arguments to
3122 3123 system commands."""
3123 3124
3124 3125 if parameter_s:
3125 3126 return self.shell.getoutput(parameter_s)
3126 3127
3127 3128
3128 3129 def magic_bookmark(self, parameter_s=''):
3129 3130 """Manage IPython's bookmark system.
3130 3131
3131 3132 %bookmark <name> - set bookmark to current dir
3132 3133 %bookmark <name> <dir> - set bookmark to <dir>
3133 3134 %bookmark -l - list all bookmarks
3134 3135 %bookmark -d <name> - remove bookmark
3135 3136 %bookmark -r - remove all bookmarks
3136 3137
3137 3138 You can later on access a bookmarked folder with:
3138 3139 %cd -b <name>
3139 3140 or simply '%cd <name>' if there is no directory called <name> AND
3140 3141 there is such a bookmark defined.
3141 3142
3142 3143 Your bookmarks persist through IPython sessions, but they are
3143 3144 associated with each profile."""
3144 3145
3145 3146 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3146 3147 if len(args) > 2:
3147 3148 raise UsageError("%bookmark: too many arguments")
3148 3149
3149 3150 bkms = self.db.get('bookmarks',{})
3150 3151
3151 3152 if opts.has_key('d'):
3152 3153 try:
3153 3154 todel = args[0]
3154 3155 except IndexError:
3155 3156 raise UsageError(
3156 3157 "%bookmark -d: must provide a bookmark to delete")
3157 3158 else:
3158 3159 try:
3159 3160 del bkms[todel]
3160 3161 except KeyError:
3161 3162 raise UsageError(
3162 3163 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3163 3164
3164 3165 elif opts.has_key('r'):
3165 3166 bkms = {}
3166 3167 elif opts.has_key('l'):
3167 3168 bks = bkms.keys()
3168 3169 bks.sort()
3169 3170 if bks:
3170 3171 size = max(map(len,bks))
3171 3172 else:
3172 3173 size = 0
3173 3174 fmt = '%-'+str(size)+'s -> %s'
3174 3175 print 'Current bookmarks:'
3175 3176 for bk in bks:
3176 3177 print fmt % (bk,bkms[bk])
3177 3178 else:
3178 3179 if not args:
3179 3180 raise UsageError("%bookmark: You must specify the bookmark name")
3180 3181 elif len(args)==1:
3181 3182 bkms[args[0]] = os.getcwdu()
3182 3183 elif len(args)==2:
3183 3184 bkms[args[0]] = args[1]
3184 3185 self.db['bookmarks'] = bkms
3185 3186
3186 3187 def magic_pycat(self, parameter_s=''):
3187 3188 """Show a syntax-highlighted file through a pager.
3188 3189
3189 3190 This magic is similar to the cat utility, but it will assume the file
3190 3191 to be Python source and will show it with syntax highlighting. """
3191 3192
3192 3193 try:
3193 3194 filename = get_py_filename(parameter_s)
3194 3195 cont = file_read(filename)
3195 3196 except IOError:
3196 3197 try:
3197 3198 cont = eval(parameter_s,self.user_ns)
3198 3199 except NameError:
3199 3200 cont = None
3200 3201 if cont is None:
3201 3202 print "Error: no such file or variable"
3202 3203 return
3203 3204
3204 3205 page.page(self.shell.pycolorize(cont))
3205 3206
3206 3207 def _rerun_pasted(self):
3207 3208 """ Rerun a previously pasted command.
3208 3209 """
3209 3210 b = self.user_ns.get('pasted_block', None)
3210 3211 if b is None:
3211 3212 raise UsageError('No previous pasted block available')
3212 3213 print "Re-executing '%s...' (%d chars)"% (b.split('\n',1)[0], len(b))
3213 3214 exec b in self.user_ns
3214 3215
3215 3216 def _get_pasted_lines(self, sentinel):
3216 3217 """ Yield pasted lines until the user enters the given sentinel value.
3217 3218 """
3218 3219 from IPython.core import interactiveshell
3219 3220 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3220 3221 while True:
3221 3222 try:
3222 3223 l = self.shell.raw_input_original(':')
3223 3224 if l == sentinel:
3224 3225 return
3225 3226 else:
3226 3227 yield l
3227 3228 except EOFError:
3228 3229 print '<EOF>'
3229 3230 return
3230 3231
3231 3232 def _strip_pasted_lines_for_code(self, raw_lines):
3232 3233 """ Strip non-code parts of a sequence of lines to return a block of
3233 3234 code.
3234 3235 """
3235 3236 # Regular expressions that declare text we strip from the input:
3236 3237 strip_re = [r'^\s*In \[\d+\]:', # IPython input prompt
3237 3238 r'^\s*(\s?>)+', # Python input prompt
3238 3239 r'^\s*\.{3,}', # Continuation prompts
3239 3240 r'^\++',
3240 3241 ]
3241 3242
3242 3243 strip_from_start = map(re.compile,strip_re)
3243 3244
3244 3245 lines = []
3245 3246 for l in raw_lines:
3246 3247 for pat in strip_from_start:
3247 3248 l = pat.sub('',l)
3248 3249 lines.append(l)
3249 3250
3250 3251 block = "\n".join(lines) + '\n'
3251 3252 #print "block:\n",block
3252 3253 return block
3253 3254
3254 3255 def _execute_block(self, block, par):
3255 3256 """ Execute a block, or store it in a variable, per the user's request.
3256 3257 """
3257 3258 if not par:
3258 3259 b = textwrap.dedent(block)
3259 3260 self.user_ns['pasted_block'] = b
3260 3261 self.run_cell(b)
3261 3262 else:
3262 3263 self.user_ns[par] = SList(block.splitlines())
3263 3264 print "Block assigned to '%s'" % par
3264 3265
3265 3266 def magic_quickref(self,arg):
3266 3267 """ Show a quick reference sheet """
3267 3268 import IPython.core.usage
3268 3269 qr = IPython.core.usage.quick_reference + self.magic_magic('-brief')
3269 3270
3270 3271 page.page(qr)
3271 3272
3272 3273 def magic_doctest_mode(self,parameter_s=''):
3273 3274 """Toggle doctest mode on and off.
3274 3275
3275 3276 This mode is intended to make IPython behave as much as possible like a
3276 3277 plain Python shell, from the perspective of how its prompts, exceptions
3277 3278 and output look. This makes it easy to copy and paste parts of a
3278 3279 session into doctests. It does so by:
3279 3280
3280 3281 - Changing the prompts to the classic ``>>>`` ones.
3281 3282 - Changing the exception reporting mode to 'Plain'.
3282 3283 - Disabling pretty-printing of output.
3283 3284
3284 3285 Note that IPython also supports the pasting of code snippets that have
3285 3286 leading '>>>' and '...' prompts in them. This means that you can paste
3286 3287 doctests from files or docstrings (even if they have leading
3287 3288 whitespace), and the code will execute correctly. You can then use
3288 3289 '%history -t' to see the translated history; this will give you the
3289 3290 input after removal of all the leading prompts and whitespace, which
3290 3291 can be pasted back into an editor.
3291 3292
3292 3293 With these features, you can switch into this mode easily whenever you
3293 3294 need to do testing and changes to doctests, without having to leave
3294 3295 your existing IPython session.
3295 3296 """
3296 3297
3297 3298 from IPython.utils.ipstruct import Struct
3298 3299
3299 3300 # Shorthands
3300 3301 shell = self.shell
3301 3302 oc = shell.displayhook
3302 3303 meta = shell.meta
3303 3304 disp_formatter = self.shell.display_formatter
3304 3305 ptformatter = disp_formatter.formatters['text/plain']
3305 3306 # dstore is a data store kept in the instance metadata bag to track any
3306 3307 # changes we make, so we can undo them later.
3307 3308 dstore = meta.setdefault('doctest_mode',Struct())
3308 3309 save_dstore = dstore.setdefault
3309 3310
3310 3311 # save a few values we'll need to recover later
3311 3312 mode = save_dstore('mode',False)
3312 3313 save_dstore('rc_pprint',ptformatter.pprint)
3313 3314 save_dstore('xmode',shell.InteractiveTB.mode)
3314 3315 save_dstore('rc_separate_out',shell.separate_out)
3315 3316 save_dstore('rc_separate_out2',shell.separate_out2)
3316 3317 save_dstore('rc_prompts_pad_left',shell.prompts_pad_left)
3317 3318 save_dstore('rc_separate_in',shell.separate_in)
3318 3319 save_dstore('rc_plain_text_only',disp_formatter.plain_text_only)
3319 3320
3320 3321 if mode == False:
3321 3322 # turn on
3322 3323 oc.prompt1.p_template = '>>> '
3323 3324 oc.prompt2.p_template = '... '
3324 3325 oc.prompt_out.p_template = ''
3325 3326
3326 3327 # Prompt separators like plain python
3327 3328 oc.input_sep = oc.prompt1.sep = ''
3328 3329 oc.output_sep = ''
3329 3330 oc.output_sep2 = ''
3330 3331
3331 3332 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3332 3333 oc.prompt_out.pad_left = False
3333 3334
3334 3335 ptformatter.pprint = False
3335 3336 disp_formatter.plain_text_only = True
3336 3337
3337 3338 shell.magic_xmode('Plain')
3338 3339 else:
3339 3340 # turn off
3340 3341 oc.prompt1.p_template = shell.prompt_in1
3341 3342 oc.prompt2.p_template = shell.prompt_in2
3342 3343 oc.prompt_out.p_template = shell.prompt_out
3343 3344
3344 3345 oc.input_sep = oc.prompt1.sep = dstore.rc_separate_in
3345 3346
3346 3347 oc.output_sep = dstore.rc_separate_out
3347 3348 oc.output_sep2 = dstore.rc_separate_out2
3348 3349
3349 3350 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3350 3351 oc.prompt_out.pad_left = dstore.rc_prompts_pad_left
3351 3352
3352 3353 ptformatter.pprint = dstore.rc_pprint
3353 3354 disp_formatter.plain_text_only = dstore.rc_plain_text_only
3354 3355
3355 3356 shell.magic_xmode(dstore.xmode)
3356 3357
3357 3358 # Store new mode and inform
3358 3359 dstore.mode = bool(1-int(mode))
3359 3360 mode_label = ['OFF','ON'][dstore.mode]
3360 3361 print 'Doctest mode is:', mode_label
3361 3362
3362 3363 def magic_gui(self, parameter_s=''):
3363 3364 """Enable or disable IPython GUI event loop integration.
3364 3365
3365 3366 %gui [GUINAME]
3366 3367
3367 3368 This magic replaces IPython's threaded shells that were activated
3368 3369 using the (pylab/wthread/etc.) command line flags. GUI toolkits
3369 3370 can now be enabled, disabled and changed at runtime and keyboard
3370 3371 interrupts should work without any problems. The following toolkits
3371 3372 are supported: wxPython, PyQt4, PyGTK, and Tk::
3372 3373
3373 3374 %gui wx # enable wxPython event loop integration
3374 3375 %gui qt4|qt # enable PyQt4 event loop integration
3375 3376 %gui gtk # enable PyGTK event loop integration
3376 3377 %gui tk # enable Tk event loop integration
3377 3378 %gui # disable all event loop integration
3378 3379
3379 3380 WARNING: after any of these has been called you can simply create
3380 3381 an application object, but DO NOT start the event loop yourself, as
3381 3382 we have already handled that.
3382 3383 """
3383 3384 from IPython.lib.inputhook import enable_gui
3384 3385 opts, arg = self.parse_options(parameter_s, '')
3385 3386 if arg=='': arg = None
3386 3387 return enable_gui(arg)
3387 3388
3388 3389 def magic_load_ext(self, module_str):
3389 3390 """Load an IPython extension by its module name."""
3390 3391 return self.extension_manager.load_extension(module_str)
3391 3392
3392 3393 def magic_unload_ext(self, module_str):
3393 3394 """Unload an IPython extension by its module name."""
3394 3395 self.extension_manager.unload_extension(module_str)
3395 3396
3396 3397 def magic_reload_ext(self, module_str):
3397 3398 """Reload an IPython extension by its module name."""
3398 3399 self.extension_manager.reload_extension(module_str)
3399 3400
3400 3401 @skip_doctest
3401 3402 def magic_install_profiles(self, s):
3402 3403 """Install the default IPython profiles into the .ipython dir.
3403 3404
3404 3405 If the default profiles have already been installed, they will not
3405 3406 be overwritten. You can force overwriting them by using the ``-o``
3406 3407 option::
3407 3408
3408 3409 In [1]: %install_profiles -o
3409 3410 """
3410 3411 if '-o' in s:
3411 3412 overwrite = True
3412 3413 else:
3413 3414 overwrite = False
3414 3415 from IPython.config import profile
3415 3416 profile_dir = os.path.dirname(profile.__file__)
3416 3417 ipython_dir = self.ipython_dir
3417 3418 print "Installing profiles to: %s [overwrite=%s]"%(ipython_dir,overwrite)
3418 3419 for src in os.listdir(profile_dir):
3419 3420 if src.startswith('profile_'):
3420 3421 name = src.replace('profile_', '')
3421 3422 print " %s"%name
3422 3423 pd = ProfileDir.create_profile_dir_by_name(ipython_dir, name)
3423 3424 pd.copy_config_file('ipython_config.py', path=src,
3424 3425 overwrite=overwrite)
3425 3426
3426 3427 @skip_doctest
3427 3428 def magic_install_default_config(self, s):
3428 3429 """Install IPython's default config file into the .ipython dir.
3429 3430
3430 3431 If the default config file (:file:`ipython_config.py`) is already
3431 3432 installed, it will not be overwritten. You can force overwriting
3432 3433 by using the ``-o`` option::
3433 3434
3434 3435 In [1]: %install_default_config
3435 3436 """
3436 3437 if '-o' in s:
3437 3438 overwrite = True
3438 3439 else:
3439 3440 overwrite = False
3440 3441 pd = self.shell.profile_dir
3441 3442 print "Installing default config file in: %s" % pd.location
3442 3443 pd.copy_config_file('ipython_config.py', overwrite=overwrite)
3443 3444
3444 3445 # Pylab support: simple wrappers that activate pylab, load gui input
3445 3446 # handling and modify slightly %run
3446 3447
3447 3448 @skip_doctest
3448 3449 def _pylab_magic_run(self, parameter_s=''):
3449 3450 Magic.magic_run(self, parameter_s,
3450 3451 runner=mpl_runner(self.shell.safe_execfile))
3451 3452
3452 3453 _pylab_magic_run.__doc__ = magic_run.__doc__
3453 3454
3454 3455 @skip_doctest
3455 3456 def magic_pylab(self, s):
3456 3457 """Load numpy and matplotlib to work interactively.
3457 3458
3458 3459 %pylab [GUINAME]
3459 3460
3460 3461 This function lets you activate pylab (matplotlib, numpy and
3461 3462 interactive support) at any point during an IPython session.
3462 3463
3463 3464 It will import at the top level numpy as np, pyplot as plt, matplotlib,
3464 3465 pylab and mlab, as well as all names from numpy and pylab.
3465 3466
3466 3467 If you are using the inline matplotlib backend for embedded figures,
3467 3468 you can adjust its behavior via the %config magic::
3468 3469
3469 3470 # enable SVG figures, necessary for SVG+XHTML export in the qtconsole
3470 3471 In [1]: %config InlineBackend.figure_format = 'svg'
3471 3472
3472 3473 # change the behavior of closing all figures at the end of each
3473 3474 # execution (cell), or allowing reuse of active figures across
3474 3475 # cells:
3475 3476 In [2]: %config InlineBackend.close_figures = False
3476 3477
3477 3478 Parameters
3478 3479 ----------
3479 3480 guiname : optional
3480 3481 One of the valid arguments to the %gui magic ('qt', 'wx', 'gtk', 'osx' or
3481 3482 'tk'). If given, the corresponding Matplotlib backend is used,
3482 3483 otherwise matplotlib's default (which you can override in your
3483 3484 matplotlib config file) is used.
3484 3485
3485 3486 Examples
3486 3487 --------
3487 3488 In this case, where the MPL default is TkAgg::
3488 3489
3489 3490 In [2]: %pylab
3490 3491
3491 3492 Welcome to pylab, a matplotlib-based Python environment.
3492 3493 Backend in use: TkAgg
3493 3494 For more information, type 'help(pylab)'.
3494 3495
3495 3496 But you can explicitly request a different backend::
3496 3497
3497 3498 In [3]: %pylab qt
3498 3499
3499 3500 Welcome to pylab, a matplotlib-based Python environment.
3500 3501 Backend in use: Qt4Agg
3501 3502 For more information, type 'help(pylab)'.
3502 3503 """
3503 3504
3504 3505 if Application.initialized():
3505 3506 app = Application.instance()
3506 3507 try:
3507 3508 import_all_status = app.pylab_import_all
3508 3509 except AttributeError:
3509 3510 import_all_status = True
3510 3511 else:
3511 3512 import_all_status = True
3512 3513
3513 3514 self.shell.enable_pylab(s,import_all=import_all_status)
3514 3515
3515 3516 def magic_tb(self, s):
3516 3517 """Print the last traceback with the currently active exception mode.
3517 3518
3518 3519 See %xmode for changing exception reporting modes."""
3519 3520 self.shell.showtraceback()
3520 3521
3521 3522 @skip_doctest
3522 3523 def magic_precision(self, s=''):
3523 3524 """Set floating point precision for pretty printing.
3524 3525
3525 3526 Can set either integer precision or a format string.
3526 3527
3527 3528 If numpy has been imported and precision is an int,
3528 3529 numpy display precision will also be set, via ``numpy.set_printoptions``.
3529 3530
3530 3531 If no argument is given, defaults will be restored.
3531 3532
3532 3533 Examples
3533 3534 --------
3534 3535 ::
3535 3536
3536 3537 In [1]: from math import pi
3537 3538
3538 3539 In [2]: %precision 3
3539 3540 Out[2]: u'%.3f'
3540 3541
3541 3542 In [3]: pi
3542 3543 Out[3]: 3.142
3543 3544
3544 3545 In [4]: %precision %i
3545 3546 Out[4]: u'%i'
3546 3547
3547 3548 In [5]: pi
3548 3549 Out[5]: 3
3549 3550
3550 3551 In [6]: %precision %e
3551 3552 Out[6]: u'%e'
3552 3553
3553 3554 In [7]: pi**10
3554 3555 Out[7]: 9.364805e+04
3555 3556
3556 3557 In [8]: %precision
3557 3558 Out[8]: u'%r'
3558 3559
3559 3560 In [9]: pi**10
3560 3561 Out[9]: 93648.047476082982
3561 3562
3562 3563 """
3563 3564
3564 3565 ptformatter = self.shell.display_formatter.formatters['text/plain']
3565 3566 ptformatter.float_precision = s
3566 3567 return ptformatter.float_format
3567 3568
3568 3569
3569 3570 @magic_arguments.magic_arguments()
3570 3571 @magic_arguments.argument(
3571 3572 '-e', '--export', action='store_true', default=False,
3572 3573 help='Export IPython history as a notebook. The filename argument '
3573 3574 'is used to specify the notebook name and format. For example '
3574 3575 'a filename of notebook.ipynb will result in a notebook name '
3575 3576 'of "notebook" and a format of "xml". Likewise using a ".json" '
3576 3577 'or ".py" file extension will write the notebook in the json '
3577 3578 'or py formats.'
3578 3579 )
3579 3580 @magic_arguments.argument(
3580 3581 '-f', '--format',
3581 3582 help='Convert an existing IPython notebook to a new format. This option '
3582 3583 'specifies the new format and can have the values: xml, json, py. '
3583 3584 'The target filename is choosen automatically based on the new '
3584 3585 'format. The filename argument gives the name of the source file.'
3585 3586 )
3586 3587 @magic_arguments.argument(
3587 3588 'filename', type=unicode,
3588 3589 help='Notebook name or filename'
3589 3590 )
3590 3591 def magic_notebook(self, s):
3591 3592 """Export and convert IPython notebooks.
3592 3593
3593 3594 This function can export the current IPython history to a notebook file
3594 3595 or can convert an existing notebook file into a different format. For
3595 3596 example, to export the history to "foo.ipynb" do "%notebook -e foo.ipynb".
3596 3597 To export the history to "foo.py" do "%notebook -e foo.py". To convert
3597 3598 "foo.ipynb" to "foo.json" do "%notebook -f json foo.ipynb". Possible
3598 3599 formats include (json/ipynb, py).
3599 3600 """
3600 3601 args = magic_arguments.parse_argstring(self.magic_notebook, s)
3601 3602
3602 3603 from IPython.nbformat import current
3603 3604 args.filename = unquote_filename(args.filename)
3604 3605 if args.export:
3605 3606 fname, name, format = current.parse_filename(args.filename)
3606 3607 cells = []
3607 3608 hist = list(self.history_manager.get_range())
3608 3609 for session, prompt_number, input in hist[:-1]:
3609 3610 cells.append(current.new_code_cell(prompt_number=prompt_number, input=input))
3610 3611 worksheet = current.new_worksheet(cells=cells)
3611 3612 nb = current.new_notebook(name=name,worksheets=[worksheet])
3612 3613 with open(fname, 'w') as f:
3613 3614 current.write(nb, f, format);
3614 3615 elif args.format is not None:
3615 3616 old_fname, old_name, old_format = current.parse_filename(args.filename)
3616 3617 new_format = args.format
3617 3618 if new_format == u'xml':
3618 3619 raise ValueError('Notebooks cannot be written as xml.')
3619 3620 elif new_format == u'ipynb' or new_format == u'json':
3620 3621 new_fname = old_name + u'.ipynb'
3621 3622 new_format = u'json'
3622 3623 elif new_format == u'py':
3623 3624 new_fname = old_name + u'.py'
3624 3625 else:
3625 3626 raise ValueError('Invalid notebook format: %s' % new_format)
3626 3627 with open(old_fname, 'r') as f:
3627 3628 s = f.read()
3628 3629 try:
3629 3630 nb = current.reads(s, old_format)
3630 3631 except:
3631 3632 nb = current.reads(s, u'xml')
3632 3633 with open(new_fname, 'w') as f:
3633 3634 current.write(nb, f, new_format)
3634 3635
3635 3636 def magic_config(self, s):
3636 3637 """configure IPython
3637 3638
3638 3639 %config Class[.trait=value]
3639 3640
3640 3641 This magic exposes most of the IPython config system. Any
3641 3642 Configurable class should be able to be configured with the simple
3642 3643 line::
3643 3644
3644 3645 %config Class.trait=value
3645 3646
3646 3647 Where `value` will be resolved in the user's namespace, if it is an
3647 3648 expression or variable name.
3648 3649
3649 3650 Examples
3650 3651 --------
3651 3652
3652 3653 To see what classes are availabe for config, pass no arguments::
3653 3654
3654 3655 In [1]: %config
3655 3656 Available objects for config:
3656 3657 TerminalInteractiveShell
3657 3658 HistoryManager
3658 3659 PrefilterManager
3659 3660 AliasManager
3660 3661 IPCompleter
3661 3662 DisplayFormatter
3662 3663
3663 3664 To view what is configurable on a given class, just pass the class name::
3664 3665
3665 3666 In [2]: %config IPCompleter
3666 3667 IPCompleter options
3667 3668 -----------------
3668 3669 IPCompleter.omit__names=<Enum>
3669 3670 Current: 2
3670 3671 Choices: (0, 1, 2)
3671 3672 Instruct the completer to omit private method names
3672 3673 Specifically, when completing on ``object.<tab>``.
3673 3674 When 2 [default]: all names that start with '_' will be excluded.
3674 3675 When 1: all 'magic' names (``__foo__``) will be excluded.
3675 3676 When 0: nothing will be excluded.
3676 3677 IPCompleter.merge_completions=<CBool>
3677 3678 Current: True
3678 3679 Whether to merge completion results into a single list
3679 3680 If False, only the completion results from the first non-empty completer
3680 3681 will be returned.
3681 3682 IPCompleter.greedy=<CBool>
3682 3683 Current: False
3683 3684 Activate greedy completion
3684 3685 This will enable completion on elements of lists, results of function calls,
3685 3686 etc., but can be unsafe because the code is actually evaluated on TAB.
3686 3687
3687 3688 but the real use is in setting values::
3688 3689
3689 3690 In [3]: %config IPCompleter.greedy = True
3690 3691
3691 3692 and these values are read from the user_ns if they are variables::
3692 3693
3693 3694 In [4]: feeling_greedy=False
3694 3695
3695 3696 In [5]: %config IPCompleter.greedy = feeling_greedy
3696 3697
3697 3698 """
3698 3699 from IPython.config.loader import Config
3699 3700 # some IPython objects are Configurable, but do not yet have
3700 3701 # any configurable traits. Exclude them from the effects of
3701 3702 # this magic, as their presence is just noise:
3702 3703 configurables = [ c for c in self.configurables if c.__class__.class_traits(config=True) ]
3703 3704 classnames = [ c.__class__.__name__ for c in configurables ]
3704 3705
3705 3706 line = s.strip()
3706 3707 if not line:
3707 3708 # print available configurable names
3708 3709 print "Available objects for config:"
3709 3710 for name in classnames:
3710 3711 print " ", name
3711 3712 return
3712 3713 elif line in classnames:
3713 3714 # `%config TerminalInteractiveShell` will print trait info for
3714 3715 # TerminalInteractiveShell
3715 3716 c = configurables[classnames.index(line)]
3716 3717 cls = c.__class__
3717 3718 help = cls.class_get_help(c)
3718 3719 # strip leading '--' from cl-args:
3719 3720 help = re.sub(re.compile(r'^--', re.MULTILINE), '', help)
3720 3721 print help
3721 3722 return
3722 3723 elif '=' not in line:
3723 3724 raise UsageError("Invalid config statement: %r, should be Class.trait = value" % line)
3724 3725
3725 3726
3726 3727 # otherwise, assume we are setting configurables.
3727 3728 # leave quotes on args when splitting, because we want
3728 3729 # unquoted args to eval in user_ns
3729 3730 cfg = Config()
3730 3731 exec "cfg."+line in locals(), self.user_ns
3731 3732
3732 3733 for configurable in configurables:
3733 3734 try:
3734 3735 configurable.update_config(cfg)
3735 3736 except Exception as e:
3736 3737 error(e)
3737 3738
3738 3739 # end Magic
General Comments 0
You need to be logged in to leave comments. Login now