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

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

@@ -1,3137 +1,3137 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Magic functions for InteractiveShell.
2 """Magic functions for InteractiveShell.
3
3
4 $Id: Magic.py 2308 2007-05-07 08:25:14Z vivainio $"""
4 $Id: Magic.py 2344 2007-05-15 15:09:39Z vivainio $"""
5
5
6 #*****************************************************************************
6 #*****************************************************************************
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 #
9 #
10 # Distributed under the terms of the BSD License. The full license is in
10 # Distributed under the terms of the BSD License. The full license is in
11 # the file COPYING, distributed as part of this software.
11 # the file COPYING, distributed as part of this software.
12 #*****************************************************************************
12 #*****************************************************************************
13
13
14 #****************************************************************************
14 #****************************************************************************
15 # Modules and globals
15 # Modules and globals
16
16
17 from IPython import Release
17 from IPython import Release
18 __author__ = '%s <%s>\n%s <%s>' % \
18 __author__ = '%s <%s>\n%s <%s>' % \
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
20 __license__ = Release.license
20 __license__ = Release.license
21
21
22 # Python standard modules
22 # Python standard modules
23 import __builtin__
23 import __builtin__
24 import bdb
24 import bdb
25 import inspect
25 import inspect
26 import os
26 import os
27 import pdb
27 import pdb
28 import pydoc
28 import pydoc
29 import sys
29 import sys
30 import re
30 import re
31 import tempfile
31 import tempfile
32 import time
32 import time
33 import cPickle as pickle
33 import cPickle as pickle
34 import textwrap
34 import textwrap
35 from cStringIO import StringIO
35 from cStringIO import StringIO
36 from getopt import getopt,GetoptError
36 from getopt import getopt,GetoptError
37 from pprint import pprint, pformat
37 from pprint import pprint, pformat
38
38
39 # cProfile was added in Python2.5
39 # cProfile was added in Python2.5
40 try:
40 try:
41 import cProfile as profile
41 import cProfile as profile
42 import pstats
42 import pstats
43 except ImportError:
43 except ImportError:
44 # profile isn't bundled by default in Debian for license reasons
44 # profile isn't bundled by default in Debian for license reasons
45 try:
45 try:
46 import profile,pstats
46 import profile,pstats
47 except ImportError:
47 except ImportError:
48 profile = pstats = None
48 profile = pstats = None
49
49
50 # Homebrewed
50 # Homebrewed
51 import IPython
51 import IPython
52 from IPython import Debugger, OInspect, wildcard
52 from IPython import Debugger, OInspect, wildcard
53 from IPython.FakeModule import FakeModule
53 from IPython.FakeModule import FakeModule
54 from IPython.Itpl import Itpl, itpl, printpl,itplns
54 from IPython.Itpl import Itpl, itpl, printpl,itplns
55 from IPython.PyColorize import Parser
55 from IPython.PyColorize import Parser
56 from IPython.ipstruct import Struct
56 from IPython.ipstruct import Struct
57 from IPython.macro import Macro
57 from IPython.macro import Macro
58 from IPython.genutils import *
58 from IPython.genutils import *
59 from IPython import platutils
59 from IPython import platutils
60
60
61 #***************************************************************************
61 #***************************************************************************
62 # Utility functions
62 # Utility functions
63 def on_off(tag):
63 def on_off(tag):
64 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
64 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
65 return ['OFF','ON'][tag]
65 return ['OFF','ON'][tag]
66
66
67 class Bunch: pass
67 class Bunch: pass
68
68
69 #***************************************************************************
69 #***************************************************************************
70 # Main class implementing Magic functionality
70 # Main class implementing Magic functionality
71 class Magic:
71 class Magic:
72 """Magic functions for InteractiveShell.
72 """Magic functions for InteractiveShell.
73
73
74 Shell functions which can be reached as %function_name. All magic
74 Shell functions which can be reached as %function_name. All magic
75 functions should accept a string, which they can parse for their own
75 functions should accept a string, which they can parse for their own
76 needs. This can make some functions easier to type, eg `%cd ../`
76 needs. This can make some functions easier to type, eg `%cd ../`
77 vs. `%cd("../")`
77 vs. `%cd("../")`
78
78
79 ALL definitions MUST begin with the prefix magic_. The user won't need it
79 ALL definitions MUST begin with the prefix magic_. The user won't need it
80 at the command line, but it is is needed in the definition. """
80 at the command line, but it is is needed in the definition. """
81
81
82 # class globals
82 # class globals
83 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
83 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
84 'Automagic is ON, % prefix NOT needed for magic functions.']
84 'Automagic is ON, % prefix NOT needed for magic functions.']
85
85
86 #......................................................................
86 #......................................................................
87 # some utility functions
87 # some utility functions
88
88
89 def __init__(self,shell):
89 def __init__(self,shell):
90
90
91 self.options_table = {}
91 self.options_table = {}
92 if profile is None:
92 if profile is None:
93 self.magic_prun = self.profile_missing_notice
93 self.magic_prun = self.profile_missing_notice
94 self.shell = shell
94 self.shell = shell
95
95
96 # namespace for holding state we may need
96 # namespace for holding state we may need
97 self._magic_state = Bunch()
97 self._magic_state = Bunch()
98
98
99 def profile_missing_notice(self, *args, **kwargs):
99 def profile_missing_notice(self, *args, **kwargs):
100 error("""\
100 error("""\
101 The profile module could not be found. If you are a Debian user,
101 The profile module could not be found. If you are a Debian user,
102 it has been removed from the standard Debian package because of its non-free
102 it has been removed from the standard Debian package because of its non-free
103 license. To use profiling, please install"python2.3-profiler" from non-free.""")
103 license. To use profiling, please install"python2.3-profiler" from non-free.""")
104
104
105 def default_option(self,fn,optstr):
105 def default_option(self,fn,optstr):
106 """Make an entry in the options_table for fn, with value optstr"""
106 """Make an entry in the options_table for fn, with value optstr"""
107
107
108 if fn not in self.lsmagic():
108 if fn not in self.lsmagic():
109 error("%s is not a magic function" % fn)
109 error("%s is not a magic function" % fn)
110 self.options_table[fn] = optstr
110 self.options_table[fn] = optstr
111
111
112 def lsmagic(self):
112 def lsmagic(self):
113 """Return a list of currently available magic functions.
113 """Return a list of currently available magic functions.
114
114
115 Gives a list of the bare names after mangling (['ls','cd', ...], not
115 Gives a list of the bare names after mangling (['ls','cd', ...], not
116 ['magic_ls','magic_cd',...]"""
116 ['magic_ls','magic_cd',...]"""
117
117
118 # FIXME. This needs a cleanup, in the way the magics list is built.
118 # FIXME. This needs a cleanup, in the way the magics list is built.
119
119
120 # magics in class definition
120 # magics in class definition
121 class_magic = lambda fn: fn.startswith('magic_') and \
121 class_magic = lambda fn: fn.startswith('magic_') and \
122 callable(Magic.__dict__[fn])
122 callable(Magic.__dict__[fn])
123 # in instance namespace (run-time user additions)
123 # in instance namespace (run-time user additions)
124 inst_magic = lambda fn: fn.startswith('magic_') and \
124 inst_magic = lambda fn: fn.startswith('magic_') and \
125 callable(self.__dict__[fn])
125 callable(self.__dict__[fn])
126 # and bound magics by user (so they can access self):
126 # and bound magics by user (so they can access self):
127 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
127 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
128 callable(self.__class__.__dict__[fn])
128 callable(self.__class__.__dict__[fn])
129 magics = filter(class_magic,Magic.__dict__.keys()) + \
129 magics = filter(class_magic,Magic.__dict__.keys()) + \
130 filter(inst_magic,self.__dict__.keys()) + \
130 filter(inst_magic,self.__dict__.keys()) + \
131 filter(inst_bound_magic,self.__class__.__dict__.keys())
131 filter(inst_bound_magic,self.__class__.__dict__.keys())
132 out = []
132 out = []
133 for fn in magics:
133 for fn in magics:
134 out.append(fn.replace('magic_','',1))
134 out.append(fn.replace('magic_','',1))
135 out.sort()
135 out.sort()
136 return out
136 return out
137
137
138 def extract_input_slices(self,slices,raw=False):
138 def extract_input_slices(self,slices,raw=False):
139 """Return as a string a set of input history slices.
139 """Return as a string a set of input history slices.
140
140
141 Inputs:
141 Inputs:
142
142
143 - slices: the set of slices is given as a list of strings (like
143 - slices: the set of slices is given as a list of strings (like
144 ['1','4:8','9'], since this function is for use by magic functions
144 ['1','4:8','9'], since this function is for use by magic functions
145 which get their arguments as strings.
145 which get their arguments as strings.
146
146
147 Optional inputs:
147 Optional inputs:
148
148
149 - raw(False): by default, the processed input is used. If this is
149 - raw(False): by default, the processed input is used. If this is
150 true, the raw input history is used instead.
150 true, the raw input history is used instead.
151
151
152 Note that slices can be called with two notations:
152 Note that slices can be called with two notations:
153
153
154 N:M -> standard python form, means including items N...(M-1).
154 N:M -> standard python form, means including items N...(M-1).
155
155
156 N-M -> include items N..M (closed endpoint)."""
156 N-M -> include items N..M (closed endpoint)."""
157
157
158 if raw:
158 if raw:
159 hist = self.shell.input_hist_raw
159 hist = self.shell.input_hist_raw
160 else:
160 else:
161 hist = self.shell.input_hist
161 hist = self.shell.input_hist
162
162
163 cmds = []
163 cmds = []
164 for chunk in slices:
164 for chunk in slices:
165 if ':' in chunk:
165 if ':' in chunk:
166 ini,fin = map(int,chunk.split(':'))
166 ini,fin = map(int,chunk.split(':'))
167 elif '-' in chunk:
167 elif '-' in chunk:
168 ini,fin = map(int,chunk.split('-'))
168 ini,fin = map(int,chunk.split('-'))
169 fin += 1
169 fin += 1
170 else:
170 else:
171 ini = int(chunk)
171 ini = int(chunk)
172 fin = ini+1
172 fin = ini+1
173 cmds.append(hist[ini:fin])
173 cmds.append(hist[ini:fin])
174 return cmds
174 return cmds
175
175
176 def _ofind(self, oname, namespaces=None):
176 def _ofind(self, oname, namespaces=None):
177 """Find an object in the available namespaces.
177 """Find an object in the available namespaces.
178
178
179 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
179 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
180
180
181 Has special code to detect magic functions.
181 Has special code to detect magic functions.
182 """
182 """
183
183
184 oname = oname.strip()
184 oname = oname.strip()
185
185
186 alias_ns = None
186 alias_ns = None
187 if namespaces is None:
187 if namespaces is None:
188 # Namespaces to search in:
188 # Namespaces to search in:
189 # Put them in a list. The order is important so that we
189 # Put them in a list. The order is important so that we
190 # find things in the same order that Python finds them.
190 # find things in the same order that Python finds them.
191 namespaces = [ ('Interactive', self.shell.user_ns),
191 namespaces = [ ('Interactive', self.shell.user_ns),
192 ('IPython internal', self.shell.internal_ns),
192 ('IPython internal', self.shell.internal_ns),
193 ('Python builtin', __builtin__.__dict__),
193 ('Python builtin', __builtin__.__dict__),
194 ('Alias', self.shell.alias_table),
194 ('Alias', self.shell.alias_table),
195 ]
195 ]
196 alias_ns = self.shell.alias_table
196 alias_ns = self.shell.alias_table
197
197
198 # initialize results to 'null'
198 # initialize results to 'null'
199 found = 0; obj = None; ospace = None; ds = None;
199 found = 0; obj = None; ospace = None; ds = None;
200 ismagic = 0; isalias = 0; parent = None
200 ismagic = 0; isalias = 0; parent = None
201
201
202 # Look for the given name by splitting it in parts. If the head is
202 # Look for the given name by splitting it in parts. If the head is
203 # found, then we look for all the remaining parts as members, and only
203 # found, then we look for all the remaining parts as members, and only
204 # declare success if we can find them all.
204 # declare success if we can find them all.
205 oname_parts = oname.split('.')
205 oname_parts = oname.split('.')
206 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
206 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
207 for nsname,ns in namespaces:
207 for nsname,ns in namespaces:
208 try:
208 try:
209 obj = ns[oname_head]
209 obj = ns[oname_head]
210 except KeyError:
210 except KeyError:
211 continue
211 continue
212 else:
212 else:
213 #print 'oname_rest:', oname_rest # dbg
213 #print 'oname_rest:', oname_rest # dbg
214 for part in oname_rest:
214 for part in oname_rest:
215 try:
215 try:
216 parent = obj
216 parent = obj
217 obj = getattr(obj,part)
217 obj = getattr(obj,part)
218 except:
218 except:
219 # Blanket except b/c some badly implemented objects
219 # Blanket except b/c some badly implemented objects
220 # allow __getattr__ to raise exceptions other than
220 # allow __getattr__ to raise exceptions other than
221 # AttributeError, which then crashes IPython.
221 # AttributeError, which then crashes IPython.
222 break
222 break
223 else:
223 else:
224 # If we finish the for loop (no break), we got all members
224 # If we finish the for loop (no break), we got all members
225 found = 1
225 found = 1
226 ospace = nsname
226 ospace = nsname
227 if ns == alias_ns:
227 if ns == alias_ns:
228 isalias = 1
228 isalias = 1
229 break # namespace loop
229 break # namespace loop
230
230
231 # Try to see if it's magic
231 # Try to see if it's magic
232 if not found:
232 if not found:
233 if oname.startswith(self.shell.ESC_MAGIC):
233 if oname.startswith(self.shell.ESC_MAGIC):
234 oname = oname[1:]
234 oname = oname[1:]
235 obj = getattr(self,'magic_'+oname,None)
235 obj = getattr(self,'magic_'+oname,None)
236 if obj is not None:
236 if obj is not None:
237 found = 1
237 found = 1
238 ospace = 'IPython internal'
238 ospace = 'IPython internal'
239 ismagic = 1
239 ismagic = 1
240
240
241 # Last try: special-case some literals like '', [], {}, etc:
241 # Last try: special-case some literals like '', [], {}, etc:
242 if not found and oname_head in ["''",'""','[]','{}','()']:
242 if not found and oname_head in ["''",'""','[]','{}','()']:
243 obj = eval(oname_head)
243 obj = eval(oname_head)
244 found = 1
244 found = 1
245 ospace = 'Interactive'
245 ospace = 'Interactive'
246
246
247 return {'found':found, 'obj':obj, 'namespace':ospace,
247 return {'found':found, 'obj':obj, 'namespace':ospace,
248 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
248 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
249
249
250 def arg_err(self,func):
250 def arg_err(self,func):
251 """Print docstring if incorrect arguments were passed"""
251 """Print docstring if incorrect arguments were passed"""
252 print 'Error in arguments:'
252 print 'Error in arguments:'
253 print OInspect.getdoc(func)
253 print OInspect.getdoc(func)
254
254
255 def format_latex(self,strng):
255 def format_latex(self,strng):
256 """Format a string for latex inclusion."""
256 """Format a string for latex inclusion."""
257
257
258 # Characters that need to be escaped for latex:
258 # Characters that need to be escaped for latex:
259 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
259 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
260 # Magic command names as headers:
260 # Magic command names as headers:
261 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
261 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
262 re.MULTILINE)
262 re.MULTILINE)
263 # Magic commands
263 # Magic commands
264 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
264 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
265 re.MULTILINE)
265 re.MULTILINE)
266 # Paragraph continue
266 # Paragraph continue
267 par_re = re.compile(r'\\$',re.MULTILINE)
267 par_re = re.compile(r'\\$',re.MULTILINE)
268
268
269 # The "\n" symbol
269 # The "\n" symbol
270 newline_re = re.compile(r'\\n')
270 newline_re = re.compile(r'\\n')
271
271
272 # Now build the string for output:
272 # Now build the string for output:
273 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
273 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
274 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
274 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
275 strng)
275 strng)
276 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
276 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
277 strng = par_re.sub(r'\\\\',strng)
277 strng = par_re.sub(r'\\\\',strng)
278 strng = escape_re.sub(r'\\\1',strng)
278 strng = escape_re.sub(r'\\\1',strng)
279 strng = newline_re.sub(r'\\textbackslash{}n',strng)
279 strng = newline_re.sub(r'\\textbackslash{}n',strng)
280 return strng
280 return strng
281
281
282 def format_screen(self,strng):
282 def format_screen(self,strng):
283 """Format a string for screen printing.
283 """Format a string for screen printing.
284
284
285 This removes some latex-type format codes."""
285 This removes some latex-type format codes."""
286 # Paragraph continue
286 # Paragraph continue
287 par_re = re.compile(r'\\$',re.MULTILINE)
287 par_re = re.compile(r'\\$',re.MULTILINE)
288 strng = par_re.sub('',strng)
288 strng = par_re.sub('',strng)
289 return strng
289 return strng
290
290
291 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
291 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
292 """Parse options passed to an argument string.
292 """Parse options passed to an argument string.
293
293
294 The interface is similar to that of getopt(), but it returns back a
294 The interface is similar to that of getopt(), but it returns back a
295 Struct with the options as keys and the stripped argument string still
295 Struct with the options as keys and the stripped argument string still
296 as a string.
296 as a string.
297
297
298 arg_str is quoted as a true sys.argv vector by using shlex.split.
298 arg_str is quoted as a true sys.argv vector by using shlex.split.
299 This allows us to easily expand variables, glob files, quote
299 This allows us to easily expand variables, glob files, quote
300 arguments, etc.
300 arguments, etc.
301
301
302 Options:
302 Options:
303 -mode: default 'string'. If given as 'list', the argument string is
303 -mode: default 'string'. If given as 'list', the argument string is
304 returned as a list (split on whitespace) instead of a string.
304 returned as a list (split on whitespace) instead of a string.
305
305
306 -list_all: put all option values in lists. Normally only options
306 -list_all: put all option values in lists. Normally only options
307 appearing more than once are put in a list.
307 appearing more than once are put in a list.
308
308
309 -posix (True): whether to split the input line in POSIX mode or not,
309 -posix (True): whether to split the input line in POSIX mode or not,
310 as per the conventions outlined in the shlex module from the
310 as per the conventions outlined in the shlex module from the
311 standard library."""
311 standard library."""
312
312
313 # inject default options at the beginning of the input line
313 # inject default options at the beginning of the input line
314 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
314 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
315 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
315 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
316
316
317 mode = kw.get('mode','string')
317 mode = kw.get('mode','string')
318 if mode not in ['string','list']:
318 if mode not in ['string','list']:
319 raise ValueError,'incorrect mode given: %s' % mode
319 raise ValueError,'incorrect mode given: %s' % mode
320 # Get options
320 # Get options
321 list_all = kw.get('list_all',0)
321 list_all = kw.get('list_all',0)
322 posix = kw.get('posix',True)
322 posix = kw.get('posix',True)
323
323
324 # Check if we have more than one argument to warrant extra processing:
324 # Check if we have more than one argument to warrant extra processing:
325 odict = {} # Dictionary with options
325 odict = {} # Dictionary with options
326 args = arg_str.split()
326 args = arg_str.split()
327 if len(args) >= 1:
327 if len(args) >= 1:
328 # If the list of inputs only has 0 or 1 thing in it, there's no
328 # If the list of inputs only has 0 or 1 thing in it, there's no
329 # need to look for options
329 # need to look for options
330 argv = arg_split(arg_str,posix)
330 argv = arg_split(arg_str,posix)
331 # Do regular option processing
331 # Do regular option processing
332 try:
332 try:
333 opts,args = getopt(argv,opt_str,*long_opts)
333 opts,args = getopt(argv,opt_str,*long_opts)
334 except GetoptError,e:
334 except GetoptError,e:
335 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
335 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
336 " ".join(long_opts)))
336 " ".join(long_opts)))
337 for o,a in opts:
337 for o,a in opts:
338 if o.startswith('--'):
338 if o.startswith('--'):
339 o = o[2:]
339 o = o[2:]
340 else:
340 else:
341 o = o[1:]
341 o = o[1:]
342 try:
342 try:
343 odict[o].append(a)
343 odict[o].append(a)
344 except AttributeError:
344 except AttributeError:
345 odict[o] = [odict[o],a]
345 odict[o] = [odict[o],a]
346 except KeyError:
346 except KeyError:
347 if list_all:
347 if list_all:
348 odict[o] = [a]
348 odict[o] = [a]
349 else:
349 else:
350 odict[o] = a
350 odict[o] = a
351
351
352 # Prepare opts,args for return
352 # Prepare opts,args for return
353 opts = Struct(odict)
353 opts = Struct(odict)
354 if mode == 'string':
354 if mode == 'string':
355 args = ' '.join(args)
355 args = ' '.join(args)
356
356
357 return opts,args
357 return opts,args
358
358
359 #......................................................................
359 #......................................................................
360 # And now the actual magic functions
360 # And now the actual magic functions
361
361
362 # Functions for IPython shell work (vars,funcs, config, etc)
362 # Functions for IPython shell work (vars,funcs, config, etc)
363 def magic_lsmagic(self, parameter_s = ''):
363 def magic_lsmagic(self, parameter_s = ''):
364 """List currently available magic functions."""
364 """List currently available magic functions."""
365 mesc = self.shell.ESC_MAGIC
365 mesc = self.shell.ESC_MAGIC
366 print 'Available magic functions:\n'+mesc+\
366 print 'Available magic functions:\n'+mesc+\
367 (' '+mesc).join(self.lsmagic())
367 (' '+mesc).join(self.lsmagic())
368 print '\n' + Magic.auto_status[self.shell.rc.automagic]
368 print '\n' + Magic.auto_status[self.shell.rc.automagic]
369 return None
369 return None
370
370
371 def magic_magic(self, parameter_s = ''):
371 def magic_magic(self, parameter_s = ''):
372 """Print information about the magic function system."""
372 """Print information about the magic function system."""
373
373
374 mode = ''
374 mode = ''
375 try:
375 try:
376 if parameter_s.split()[0] == '-latex':
376 if parameter_s.split()[0] == '-latex':
377 mode = 'latex'
377 mode = 'latex'
378 if parameter_s.split()[0] == '-brief':
378 if parameter_s.split()[0] == '-brief':
379 mode = 'brief'
379 mode = 'brief'
380 except:
380 except:
381 pass
381 pass
382
382
383 magic_docs = []
383 magic_docs = []
384 for fname in self.lsmagic():
384 for fname in self.lsmagic():
385 mname = 'magic_' + fname
385 mname = 'magic_' + fname
386 for space in (Magic,self,self.__class__):
386 for space in (Magic,self,self.__class__):
387 try:
387 try:
388 fn = space.__dict__[mname]
388 fn = space.__dict__[mname]
389 except KeyError:
389 except KeyError:
390 pass
390 pass
391 else:
391 else:
392 break
392 break
393 if mode == 'brief':
393 if mode == 'brief':
394 # only first line
394 # only first line
395 fndoc = fn.__doc__.split('\n',1)[0]
395 fndoc = fn.__doc__.split('\n',1)[0]
396 else:
396 else:
397 fndoc = fn.__doc__
397 fndoc = fn.__doc__
398
398
399 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
399 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
400 fname,fndoc))
400 fname,fndoc))
401 magic_docs = ''.join(magic_docs)
401 magic_docs = ''.join(magic_docs)
402
402
403 if mode == 'latex':
403 if mode == 'latex':
404 print self.format_latex(magic_docs)
404 print self.format_latex(magic_docs)
405 return
405 return
406 else:
406 else:
407 magic_docs = self.format_screen(magic_docs)
407 magic_docs = self.format_screen(magic_docs)
408 if mode == 'brief':
408 if mode == 'brief':
409 return magic_docs
409 return magic_docs
410
410
411 outmsg = """
411 outmsg = """
412 IPython's 'magic' functions
412 IPython's 'magic' functions
413 ===========================
413 ===========================
414
414
415 The magic function system provides a series of functions which allow you to
415 The magic function system provides a series of functions which allow you to
416 control the behavior of IPython itself, plus a lot of system-type
416 control the behavior of IPython itself, plus a lot of system-type
417 features. All these functions are prefixed with a % character, but parameters
417 features. All these functions are prefixed with a % character, but parameters
418 are given without parentheses or quotes.
418 are given without parentheses or quotes.
419
419
420 NOTE: If you have 'automagic' enabled (via the command line option or with the
420 NOTE: If you have 'automagic' enabled (via the command line option or with the
421 %automagic function), you don't need to type in the % explicitly. By default,
421 %automagic function), you don't need to type in the % explicitly. By default,
422 IPython ships with automagic on, so you should only rarely need the % escape.
422 IPython ships with automagic on, so you should only rarely need the % escape.
423
423
424 Example: typing '%cd mydir' (without the quotes) changes you working directory
424 Example: typing '%cd mydir' (without the quotes) changes you working directory
425 to 'mydir', if it exists.
425 to 'mydir', if it exists.
426
426
427 You can define your own magic functions to extend the system. See the supplied
427 You can define your own magic functions to extend the system. See the supplied
428 ipythonrc and example-magic.py files for details (in your ipython
428 ipythonrc and example-magic.py files for details (in your ipython
429 configuration directory, typically $HOME/.ipython/).
429 configuration directory, typically $HOME/.ipython/).
430
430
431 You can also define your own aliased names for magic functions. In your
431 You can also define your own aliased names for magic functions. In your
432 ipythonrc file, placing a line like:
432 ipythonrc file, placing a line like:
433
433
434 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
434 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
435
435
436 will define %pf as a new name for %profile.
436 will define %pf as a new name for %profile.
437
437
438 You can also call magics in code using the ipmagic() function, which IPython
438 You can also call magics in code using the ipmagic() function, which IPython
439 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
439 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
440
440
441 For a list of the available magic functions, use %lsmagic. For a description
441 For a list of the available magic functions, use %lsmagic. For a description
442 of any of them, type %magic_name?, e.g. '%cd?'.
442 of any of them, type %magic_name?, e.g. '%cd?'.
443
443
444 Currently the magic system has the following functions:\n"""
444 Currently the magic system has the following functions:\n"""
445
445
446 mesc = self.shell.ESC_MAGIC
446 mesc = self.shell.ESC_MAGIC
447 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
447 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
448 "\n\n%s%s\n\n%s" % (outmsg,
448 "\n\n%s%s\n\n%s" % (outmsg,
449 magic_docs,mesc,mesc,
449 magic_docs,mesc,mesc,
450 (' '+mesc).join(self.lsmagic()),
450 (' '+mesc).join(self.lsmagic()),
451 Magic.auto_status[self.shell.rc.automagic] ) )
451 Magic.auto_status[self.shell.rc.automagic] ) )
452
452
453 page(outmsg,screen_lines=self.shell.rc.screen_length)
453 page(outmsg,screen_lines=self.shell.rc.screen_length)
454
454
455 def magic_automagic(self, parameter_s = ''):
455 def magic_automagic(self, parameter_s = ''):
456 """Make magic functions callable without having to type the initial %.
456 """Make magic functions callable without having to type the initial %.
457
457
458 Without argumentsl toggles on/off (when off, you must call it as
458 Without argumentsl toggles on/off (when off, you must call it as
459 %automagic, of course). With arguments it sets the value, and you can
459 %automagic, of course). With arguments it sets the value, and you can
460 use any of (case insensitive):
460 use any of (case insensitive):
461
461
462 - on,1,True: to activate
462 - on,1,True: to activate
463
463
464 - off,0,False: to deactivate.
464 - off,0,False: to deactivate.
465
465
466 Note that magic functions have lowest priority, so if there's a
466 Note that magic functions have lowest priority, so if there's a
467 variable whose name collides with that of a magic fn, automagic won't
467 variable whose name collides with that of a magic fn, automagic won't
468 work for that function (you get the variable instead). However, if you
468 work for that function (you get the variable instead). However, if you
469 delete the variable (del var), the previously shadowed magic function
469 delete the variable (del var), the previously shadowed magic function
470 becomes visible to automagic again."""
470 becomes visible to automagic again."""
471
471
472 rc = self.shell.rc
472 rc = self.shell.rc
473 arg = parameter_s.lower()
473 arg = parameter_s.lower()
474 if parameter_s in ('on','1','true'):
474 if parameter_s in ('on','1','true'):
475 rc.automagic = True
475 rc.automagic = True
476 elif parameter_s in ('off','0','false'):
476 elif parameter_s in ('off','0','false'):
477 rc.automagic = False
477 rc.automagic = False
478 else:
478 else:
479 rc.automagic = not rc.automagic
479 rc.automagic = not rc.automagic
480 print '\n' + Magic.auto_status[rc.automagic]
480 print '\n' + Magic.auto_status[rc.automagic]
481
481
482 def magic_autocall(self, parameter_s = ''):
482 def magic_autocall(self, parameter_s = ''):
483 """Make functions callable without having to type parentheses.
483 """Make functions callable without having to type parentheses.
484
484
485 Usage:
485 Usage:
486
486
487 %autocall [mode]
487 %autocall [mode]
488
488
489 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
489 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
490 value is toggled on and off (remembering the previous state)."""
490 value is toggled on and off (remembering the previous state)."""
491
491
492 rc = self.shell.rc
492 rc = self.shell.rc
493
493
494 if parameter_s:
494 if parameter_s:
495 arg = int(parameter_s)
495 arg = int(parameter_s)
496 else:
496 else:
497 arg = 'toggle'
497 arg = 'toggle'
498
498
499 if not arg in (0,1,2,'toggle'):
499 if not arg in (0,1,2,'toggle'):
500 error('Valid modes: (0->Off, 1->Smart, 2->Full')
500 error('Valid modes: (0->Off, 1->Smart, 2->Full')
501 return
501 return
502
502
503 if arg in (0,1,2):
503 if arg in (0,1,2):
504 rc.autocall = arg
504 rc.autocall = arg
505 else: # toggle
505 else: # toggle
506 if rc.autocall:
506 if rc.autocall:
507 self._magic_state.autocall_save = rc.autocall
507 self._magic_state.autocall_save = rc.autocall
508 rc.autocall = 0
508 rc.autocall = 0
509 else:
509 else:
510 try:
510 try:
511 rc.autocall = self._magic_state.autocall_save
511 rc.autocall = self._magic_state.autocall_save
512 except AttributeError:
512 except AttributeError:
513 rc.autocall = self._magic_state.autocall_save = 1
513 rc.autocall = self._magic_state.autocall_save = 1
514
514
515 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
515 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
516
516
517 def magic_autoindent(self, parameter_s = ''):
517 def magic_autoindent(self, parameter_s = ''):
518 """Toggle autoindent on/off (if available)."""
518 """Toggle autoindent on/off (if available)."""
519
519
520 self.shell.set_autoindent()
520 self.shell.set_autoindent()
521 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
521 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
522
522
523 def magic_system_verbose(self, parameter_s = ''):
523 def magic_system_verbose(self, parameter_s = ''):
524 """Set verbose printing of system calls.
524 """Set verbose printing of system calls.
525
525
526 If called without an argument, act as a toggle"""
526 If called without an argument, act as a toggle"""
527
527
528 if parameter_s:
528 if parameter_s:
529 val = bool(eval(parameter_s))
529 val = bool(eval(parameter_s))
530 else:
530 else:
531 val = None
531 val = None
532
532
533 self.shell.rc_set_toggle('system_verbose',val)
533 self.shell.rc_set_toggle('system_verbose',val)
534 print "System verbose printing is:",\
534 print "System verbose printing is:",\
535 ['OFF','ON'][self.shell.rc.system_verbose]
535 ['OFF','ON'][self.shell.rc.system_verbose]
536
536
537 def magic_history(self, parameter_s = ''):
537 def magic_history(self, parameter_s = ''):
538 """Print input history (_i<n> variables), with most recent last.
538 """Print input history (_i<n> variables), with most recent last.
539
539
540 %history -> print at most 40 inputs (some may be multi-line)\\
540 %history -> print at most 40 inputs (some may be multi-line)\\
541 %history n -> print at most n inputs\\
541 %history n -> print at most n inputs\\
542 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
542 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
543
543
544 Each input's number <n> is shown, and is accessible as the
544 Each input's number <n> is shown, and is accessible as the
545 automatically generated variable _i<n>. Multi-line statements are
545 automatically generated variable _i<n>. Multi-line statements are
546 printed starting at a new line for easy copy/paste.
546 printed starting at a new line for easy copy/paste.
547
547
548
548
549 Options:
549 Options:
550
550
551 -n: do NOT print line numbers. This is useful if you want to get a
551 -n: do NOT print line numbers. This is useful if you want to get a
552 printout of many lines which can be directly pasted into a text
552 printout of many lines which can be directly pasted into a text
553 editor.
553 editor.
554
554
555 This feature is only available if numbered prompts are in use.
555 This feature is only available if numbered prompts are in use.
556
556
557 -r: print the 'raw' history. IPython filters your input and
557 -r: print the 'raw' history. IPython filters your input and
558 converts it all into valid Python source before executing it (things
558 converts it all into valid Python source before executing it (things
559 like magics or aliases are turned into function calls, for
559 like magics or aliases are turned into function calls, for
560 example). With this option, you'll see the unfiltered history
560 example). With this option, you'll see the unfiltered history
561 instead of the filtered version: '%cd /' will be seen as '%cd /'
561 instead of the filtered version: '%cd /' will be seen as '%cd /'
562 instead of '_ip.magic("%cd /")'.
562 instead of '_ip.magic("%cd /")'.
563 """
563 """
564
564
565 shell = self.shell
565 shell = self.shell
566 if not shell.outputcache.do_full_cache:
566 if not shell.outputcache.do_full_cache:
567 print 'This feature is only available if numbered prompts are in use.'
567 print 'This feature is only available if numbered prompts are in use.'
568 return
568 return
569 opts,args = self.parse_options(parameter_s,'nr',mode='list')
569 opts,args = self.parse_options(parameter_s,'nr',mode='list')
570
570
571 if opts.has_key('r'):
571 if opts.has_key('r'):
572 input_hist = shell.input_hist_raw
572 input_hist = shell.input_hist_raw
573 else:
573 else:
574 input_hist = shell.input_hist
574 input_hist = shell.input_hist
575
575
576 default_length = 40
576 default_length = 40
577 if len(args) == 0:
577 if len(args) == 0:
578 final = len(input_hist)
578 final = len(input_hist)
579 init = max(1,final-default_length)
579 init = max(1,final-default_length)
580 elif len(args) == 1:
580 elif len(args) == 1:
581 final = len(input_hist)
581 final = len(input_hist)
582 init = max(1,final-int(args[0]))
582 init = max(1,final-int(args[0]))
583 elif len(args) == 2:
583 elif len(args) == 2:
584 init,final = map(int,args)
584 init,final = map(int,args)
585 else:
585 else:
586 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
586 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
587 print self.magic_hist.__doc__
587 print self.magic_hist.__doc__
588 return
588 return
589 width = len(str(final))
589 width = len(str(final))
590 line_sep = ['','\n']
590 line_sep = ['','\n']
591 print_nums = not opts.has_key('n')
591 print_nums = not opts.has_key('n')
592 for in_num in range(init,final):
592 for in_num in range(init,final):
593 inline = input_hist[in_num]
593 inline = input_hist[in_num]
594 multiline = int(inline.count('\n') > 1)
594 multiline = int(inline.count('\n') > 1)
595 if print_nums:
595 if print_nums:
596 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
596 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
597 print inline,
597 print inline,
598
598
599 def magic_hist(self, parameter_s=''):
599 def magic_hist(self, parameter_s=''):
600 """Alternate name for %history."""
600 """Alternate name for %history."""
601 return self.magic_history(parameter_s)
601 return self.magic_history(parameter_s)
602
602
603 def magic_p(self, parameter_s=''):
603 def magic_p(self, parameter_s=''):
604 """Just a short alias for Python's 'print'."""
604 """Just a short alias for Python's 'print'."""
605 exec 'print ' + parameter_s in self.shell.user_ns
605 exec 'print ' + parameter_s in self.shell.user_ns
606
606
607 def magic_r(self, parameter_s=''):
607 def magic_r(self, parameter_s=''):
608 """Repeat previous input.
608 """Repeat previous input.
609
609
610 If given an argument, repeats the previous command which starts with
610 If given an argument, repeats the previous command which starts with
611 the same string, otherwise it just repeats the previous input.
611 the same string, otherwise it just repeats the previous input.
612
612
613 Shell escaped commands (with ! as first character) are not recognized
613 Shell escaped commands (with ! as first character) are not recognized
614 by this system, only pure python code and magic commands.
614 by this system, only pure python code and magic commands.
615 """
615 """
616
616
617 start = parameter_s.strip()
617 start = parameter_s.strip()
618 esc_magic = self.shell.ESC_MAGIC
618 esc_magic = self.shell.ESC_MAGIC
619 # Identify magic commands even if automagic is on (which means
619 # Identify magic commands even if automagic is on (which means
620 # the in-memory version is different from that typed by the user).
620 # the in-memory version is different from that typed by the user).
621 if self.shell.rc.automagic:
621 if self.shell.rc.automagic:
622 start_magic = esc_magic+start
622 start_magic = esc_magic+start
623 else:
623 else:
624 start_magic = start
624 start_magic = start
625 # Look through the input history in reverse
625 # Look through the input history in reverse
626 for n in range(len(self.shell.input_hist)-2,0,-1):
626 for n in range(len(self.shell.input_hist)-2,0,-1):
627 input = self.shell.input_hist[n]
627 input = self.shell.input_hist[n]
628 # skip plain 'r' lines so we don't recurse to infinity
628 # skip plain 'r' lines so we don't recurse to infinity
629 if input != '_ip.magic("r")\n' and \
629 if input != '_ip.magic("r")\n' and \
630 (input.startswith(start) or input.startswith(start_magic)):
630 (input.startswith(start) or input.startswith(start_magic)):
631 #print 'match',`input` # dbg
631 #print 'match',`input` # dbg
632 print 'Executing:',input,
632 print 'Executing:',input,
633 self.shell.runlines(input)
633 self.shell.runlines(input)
634 return
634 return
635 print 'No previous input matching `%s` found.' % start
635 print 'No previous input matching `%s` found.' % start
636
636
637 def magic_page(self, parameter_s=''):
637 def magic_page(self, parameter_s=''):
638 """Pretty print the object and display it through a pager.
638 """Pretty print the object and display it through a pager.
639
639
640 %page [options] OBJECT
640 %page [options] OBJECT
641
641
642 If no object is given, use _ (last output).
642 If no object is given, use _ (last output).
643
643
644 Options:
644 Options:
645
645
646 -r: page str(object), don't pretty-print it."""
646 -r: page str(object), don't pretty-print it."""
647
647
648 # After a function contributed by Olivier Aubert, slightly modified.
648 # After a function contributed by Olivier Aubert, slightly modified.
649
649
650 # Process options/args
650 # Process options/args
651 opts,args = self.parse_options(parameter_s,'r')
651 opts,args = self.parse_options(parameter_s,'r')
652 raw = 'r' in opts
652 raw = 'r' in opts
653
653
654 oname = args and args or '_'
654 oname = args and args or '_'
655 info = self._ofind(oname)
655 info = self._ofind(oname)
656 if info['found']:
656 if info['found']:
657 txt = (raw and str or pformat)( info['obj'] )
657 txt = (raw and str or pformat)( info['obj'] )
658 page(txt)
658 page(txt)
659 else:
659 else:
660 print 'Object `%s` not found' % oname
660 print 'Object `%s` not found' % oname
661
661
662 def magic_profile(self, parameter_s=''):
662 def magic_profile(self, parameter_s=''):
663 """Print your currently active IPyhton profile."""
663 """Print your currently active IPyhton profile."""
664 if self.shell.rc.profile:
664 if self.shell.rc.profile:
665 printpl('Current IPython profile: $self.shell.rc.profile.')
665 printpl('Current IPython profile: $self.shell.rc.profile.')
666 else:
666 else:
667 print 'No profile active.'
667 print 'No profile active.'
668
668
669 def _inspect(self,meth,oname,namespaces=None,**kw):
669 def _inspect(self,meth,oname,namespaces=None,**kw):
670 """Generic interface to the inspector system.
670 """Generic interface to the inspector system.
671
671
672 This function is meant to be called by pdef, pdoc & friends."""
672 This function is meant to be called by pdef, pdoc & friends."""
673
673
674 #oname = oname.strip()
674 #oname = oname.strip()
675 #print '1- oname: <%r>' % oname # dbg
675 #print '1- oname: <%r>' % oname # dbg
676 try:
676 try:
677 oname = oname.strip().encode('ascii')
677 oname = oname.strip().encode('ascii')
678 #print '2- oname: <%r>' % oname # dbg
678 #print '2- oname: <%r>' % oname # dbg
679 except UnicodeEncodeError:
679 except UnicodeEncodeError:
680 print 'Python identifiers can only contain ascii characters.'
680 print 'Python identifiers can only contain ascii characters.'
681 return 'not found'
681 return 'not found'
682
682
683 info = Struct(self._ofind(oname, namespaces))
683 info = Struct(self._ofind(oname, namespaces))
684
684
685 if info.found:
685 if info.found:
686 # Get the docstring of the class property if it exists.
686 # Get the docstring of the class property if it exists.
687 path = oname.split('.')
687 path = oname.split('.')
688 root = '.'.join(path[:-1])
688 root = '.'.join(path[:-1])
689 if info.parent is not None:
689 if info.parent is not None:
690 try:
690 try:
691 target = getattr(info.parent, '__class__')
691 target = getattr(info.parent, '__class__')
692 # The object belongs to a class instance.
692 # The object belongs to a class instance.
693 try:
693 try:
694 target = getattr(target, path[-1])
694 target = getattr(target, path[-1])
695 # The class defines the object.
695 # The class defines the object.
696 if isinstance(target, property):
696 if isinstance(target, property):
697 oname = root + '.__class__.' + path[-1]
697 oname = root + '.__class__.' + path[-1]
698 info = Struct(self._ofind(oname))
698 info = Struct(self._ofind(oname))
699 except AttributeError: pass
699 except AttributeError: pass
700 except AttributeError: pass
700 except AttributeError: pass
701
701
702 pmethod = getattr(self.shell.inspector,meth)
702 pmethod = getattr(self.shell.inspector,meth)
703 formatter = info.ismagic and self.format_screen or None
703 formatter = info.ismagic and self.format_screen or None
704 if meth == 'pdoc':
704 if meth == 'pdoc':
705 pmethod(info.obj,oname,formatter)
705 pmethod(info.obj,oname,formatter)
706 elif meth == 'pinfo':
706 elif meth == 'pinfo':
707 pmethod(info.obj,oname,formatter,info,**kw)
707 pmethod(info.obj,oname,formatter,info,**kw)
708 else:
708 else:
709 pmethod(info.obj,oname)
709 pmethod(info.obj,oname)
710 else:
710 else:
711 print 'Object `%s` not found.' % oname
711 print 'Object `%s` not found.' % oname
712 return 'not found' # so callers can take other action
712 return 'not found' # so callers can take other action
713
713
714 def magic_pdef(self, parameter_s='', namespaces=None):
714 def magic_pdef(self, parameter_s='', namespaces=None):
715 """Print the definition header for any callable object.
715 """Print the definition header for any callable object.
716
716
717 If the object is a class, print the constructor information."""
717 If the object is a class, print the constructor information."""
718 self._inspect('pdef',parameter_s, namespaces)
718 self._inspect('pdef',parameter_s, namespaces)
719
719
720 def magic_pdoc(self, parameter_s='', namespaces=None):
720 def magic_pdoc(self, parameter_s='', namespaces=None):
721 """Print the docstring for an object.
721 """Print the docstring for an object.
722
722
723 If the given object is a class, it will print both the class and the
723 If the given object is a class, it will print both the class and the
724 constructor docstrings."""
724 constructor docstrings."""
725 self._inspect('pdoc',parameter_s, namespaces)
725 self._inspect('pdoc',parameter_s, namespaces)
726
726
727 def magic_psource(self, parameter_s='', namespaces=None):
727 def magic_psource(self, parameter_s='', namespaces=None):
728 """Print (or run through pager) the source code for an object."""
728 """Print (or run through pager) the source code for an object."""
729 self._inspect('psource',parameter_s, namespaces)
729 self._inspect('psource',parameter_s, namespaces)
730
730
731 def magic_pfile(self, parameter_s=''):
731 def magic_pfile(self, parameter_s=''):
732 """Print (or run through pager) the file where an object is defined.
732 """Print (or run through pager) the file where an object is defined.
733
733
734 The file opens at the line where the object definition begins. IPython
734 The file opens at the line where the object definition begins. IPython
735 will honor the environment variable PAGER if set, and otherwise will
735 will honor the environment variable PAGER if set, and otherwise will
736 do its best to print the file in a convenient form.
736 do its best to print the file in a convenient form.
737
737
738 If the given argument is not an object currently defined, IPython will
738 If the given argument is not an object currently defined, IPython will
739 try to interpret it as a filename (automatically adding a .py extension
739 try to interpret it as a filename (automatically adding a .py extension
740 if needed). You can thus use %pfile as a syntax highlighting code
740 if needed). You can thus use %pfile as a syntax highlighting code
741 viewer."""
741 viewer."""
742
742
743 # first interpret argument as an object name
743 # first interpret argument as an object name
744 out = self._inspect('pfile',parameter_s)
744 out = self._inspect('pfile',parameter_s)
745 # if not, try the input as a filename
745 # if not, try the input as a filename
746 if out == 'not found':
746 if out == 'not found':
747 try:
747 try:
748 filename = get_py_filename(parameter_s)
748 filename = get_py_filename(parameter_s)
749 except IOError,msg:
749 except IOError,msg:
750 print msg
750 print msg
751 return
751 return
752 page(self.shell.inspector.format(file(filename).read()))
752 page(self.shell.inspector.format(file(filename).read()))
753
753
754 def magic_pinfo(self, parameter_s='', namespaces=None):
754 def magic_pinfo(self, parameter_s='', namespaces=None):
755 """Provide detailed information about an object.
755 """Provide detailed information about an object.
756
756
757 '%pinfo object' is just a synonym for object? or ?object."""
757 '%pinfo object' is just a synonym for object? or ?object."""
758
758
759 #print 'pinfo par: <%s>' % parameter_s # dbg
759 #print 'pinfo par: <%s>' % parameter_s # dbg
760
760
761 # detail_level: 0 -> obj? , 1 -> obj??
761 # detail_level: 0 -> obj? , 1 -> obj??
762 detail_level = 0
762 detail_level = 0
763 # We need to detect if we got called as 'pinfo pinfo foo', which can
763 # We need to detect if we got called as 'pinfo pinfo foo', which can
764 # happen if the user types 'pinfo foo?' at the cmd line.
764 # happen if the user types 'pinfo foo?' at the cmd line.
765 pinfo,qmark1,oname,qmark2 = \
765 pinfo,qmark1,oname,qmark2 = \
766 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
766 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
767 if pinfo or qmark1 or qmark2:
767 if pinfo or qmark1 or qmark2:
768 detail_level = 1
768 detail_level = 1
769 if "*" in oname:
769 if "*" in oname:
770 self.magic_psearch(oname)
770 self.magic_psearch(oname)
771 else:
771 else:
772 self._inspect('pinfo', oname, detail_level=detail_level,
772 self._inspect('pinfo', oname, detail_level=detail_level,
773 namespaces=namespaces)
773 namespaces=namespaces)
774
774
775 def magic_psearch(self, parameter_s=''):
775 def magic_psearch(self, parameter_s=''):
776 """Search for object in namespaces by wildcard.
776 """Search for object in namespaces by wildcard.
777
777
778 %psearch [options] PATTERN [OBJECT TYPE]
778 %psearch [options] PATTERN [OBJECT TYPE]
779
779
780 Note: ? can be used as a synonym for %psearch, at the beginning or at
780 Note: ? can be used as a synonym for %psearch, at the beginning or at
781 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
781 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
782 rest of the command line must be unchanged (options come first), so
782 rest of the command line must be unchanged (options come first), so
783 for example the following forms are equivalent
783 for example the following forms are equivalent
784
784
785 %psearch -i a* function
785 %psearch -i a* function
786 -i a* function?
786 -i a* function?
787 ?-i a* function
787 ?-i a* function
788
788
789 Arguments:
789 Arguments:
790
790
791 PATTERN
791 PATTERN
792
792
793 where PATTERN is a string containing * as a wildcard similar to its
793 where PATTERN is a string containing * as a wildcard similar to its
794 use in a shell. The pattern is matched in all namespaces on the
794 use in a shell. The pattern is matched in all namespaces on the
795 search path. By default objects starting with a single _ are not
795 search path. By default objects starting with a single _ are not
796 matched, many IPython generated objects have a single
796 matched, many IPython generated objects have a single
797 underscore. The default is case insensitive matching. Matching is
797 underscore. The default is case insensitive matching. Matching is
798 also done on the attributes of objects and not only on the objects
798 also done on the attributes of objects and not only on the objects
799 in a module.
799 in a module.
800
800
801 [OBJECT TYPE]
801 [OBJECT TYPE]
802
802
803 Is the name of a python type from the types module. The name is
803 Is the name of a python type from the types module. The name is
804 given in lowercase without the ending type, ex. StringType is
804 given in lowercase without the ending type, ex. StringType is
805 written string. By adding a type here only objects matching the
805 written string. By adding a type here only objects matching the
806 given type are matched. Using all here makes the pattern match all
806 given type are matched. Using all here makes the pattern match all
807 types (this is the default).
807 types (this is the default).
808
808
809 Options:
809 Options:
810
810
811 -a: makes the pattern match even objects whose names start with a
811 -a: makes the pattern match even objects whose names start with a
812 single underscore. These names are normally ommitted from the
812 single underscore. These names are normally ommitted from the
813 search.
813 search.
814
814
815 -i/-c: make the pattern case insensitive/sensitive. If neither of
815 -i/-c: make the pattern case insensitive/sensitive. If neither of
816 these options is given, the default is read from your ipythonrc
816 these options is given, the default is read from your ipythonrc
817 file. The option name which sets this value is
817 file. The option name which sets this value is
818 'wildcards_case_sensitive'. If this option is not specified in your
818 'wildcards_case_sensitive'. If this option is not specified in your
819 ipythonrc file, IPython's internal default is to do a case sensitive
819 ipythonrc file, IPython's internal default is to do a case sensitive
820 search.
820 search.
821
821
822 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
822 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
823 specifiy can be searched in any of the following namespaces:
823 specifiy can be searched in any of the following namespaces:
824 'builtin', 'user', 'user_global','internal', 'alias', where
824 'builtin', 'user', 'user_global','internal', 'alias', where
825 'builtin' and 'user' are the search defaults. Note that you should
825 'builtin' and 'user' are the search defaults. Note that you should
826 not use quotes when specifying namespaces.
826 not use quotes when specifying namespaces.
827
827
828 'Builtin' contains the python module builtin, 'user' contains all
828 'Builtin' contains the python module builtin, 'user' contains all
829 user data, 'alias' only contain the shell aliases and no python
829 user data, 'alias' only contain the shell aliases and no python
830 objects, 'internal' contains objects used by IPython. The
830 objects, 'internal' contains objects used by IPython. The
831 'user_global' namespace is only used by embedded IPython instances,
831 'user_global' namespace is only used by embedded IPython instances,
832 and it contains module-level globals. You can add namespaces to the
832 and it contains module-level globals. You can add namespaces to the
833 search with -s or exclude them with -e (these options can be given
833 search with -s or exclude them with -e (these options can be given
834 more than once).
834 more than once).
835
835
836 Examples:
836 Examples:
837
837
838 %psearch a* -> objects beginning with an a
838 %psearch a* -> objects beginning with an a
839 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
839 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
840 %psearch a* function -> all functions beginning with an a
840 %psearch a* function -> all functions beginning with an a
841 %psearch re.e* -> objects beginning with an e in module re
841 %psearch re.e* -> objects beginning with an e in module re
842 %psearch r*.e* -> objects that start with e in modules starting in r
842 %psearch r*.e* -> objects that start with e in modules starting in r
843 %psearch r*.* string -> all strings in modules beginning with r
843 %psearch r*.* string -> all strings in modules beginning with r
844
844
845 Case sensitve search:
845 Case sensitve search:
846
846
847 %psearch -c a* list all object beginning with lower case a
847 %psearch -c a* list all object beginning with lower case a
848
848
849 Show objects beginning with a single _:
849 Show objects beginning with a single _:
850
850
851 %psearch -a _* list objects beginning with a single underscore"""
851 %psearch -a _* list objects beginning with a single underscore"""
852 try:
852 try:
853 parameter_s = parameter_s.encode('ascii')
853 parameter_s = parameter_s.encode('ascii')
854 except UnicodeEncodeError:
854 except UnicodeEncodeError:
855 print 'Python identifiers can only contain ascii characters.'
855 print 'Python identifiers can only contain ascii characters.'
856 return
856 return
857
857
858 # default namespaces to be searched
858 # default namespaces to be searched
859 def_search = ['user','builtin']
859 def_search = ['user','builtin']
860
860
861 # Process options/args
861 # Process options/args
862 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
862 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
863 opt = opts.get
863 opt = opts.get
864 shell = self.shell
864 shell = self.shell
865 psearch = shell.inspector.psearch
865 psearch = shell.inspector.psearch
866
866
867 # select case options
867 # select case options
868 if opts.has_key('i'):
868 if opts.has_key('i'):
869 ignore_case = True
869 ignore_case = True
870 elif opts.has_key('c'):
870 elif opts.has_key('c'):
871 ignore_case = False
871 ignore_case = False
872 else:
872 else:
873 ignore_case = not shell.rc.wildcards_case_sensitive
873 ignore_case = not shell.rc.wildcards_case_sensitive
874
874
875 # Build list of namespaces to search from user options
875 # Build list of namespaces to search from user options
876 def_search.extend(opt('s',[]))
876 def_search.extend(opt('s',[]))
877 ns_exclude = ns_exclude=opt('e',[])
877 ns_exclude = ns_exclude=opt('e',[])
878 ns_search = [nm for nm in def_search if nm not in ns_exclude]
878 ns_search = [nm for nm in def_search if nm not in ns_exclude]
879
879
880 # Call the actual search
880 # Call the actual search
881 try:
881 try:
882 psearch(args,shell.ns_table,ns_search,
882 psearch(args,shell.ns_table,ns_search,
883 show_all=opt('a'),ignore_case=ignore_case)
883 show_all=opt('a'),ignore_case=ignore_case)
884 except:
884 except:
885 shell.showtraceback()
885 shell.showtraceback()
886
886
887 def magic_who_ls(self, parameter_s=''):
887 def magic_who_ls(self, parameter_s=''):
888 """Return a sorted list of all interactive variables.
888 """Return a sorted list of all interactive variables.
889
889
890 If arguments are given, only variables of types matching these
890 If arguments are given, only variables of types matching these
891 arguments are returned."""
891 arguments are returned."""
892
892
893 user_ns = self.shell.user_ns
893 user_ns = self.shell.user_ns
894 internal_ns = self.shell.internal_ns
894 internal_ns = self.shell.internal_ns
895 user_config_ns = self.shell.user_config_ns
895 user_config_ns = self.shell.user_config_ns
896 out = []
896 out = []
897 typelist = parameter_s.split()
897 typelist = parameter_s.split()
898
898
899 for i in user_ns:
899 for i in user_ns:
900 if not (i.startswith('_') or i.startswith('_i')) \
900 if not (i.startswith('_') or i.startswith('_i')) \
901 and not (i in internal_ns or i in user_config_ns):
901 and not (i in internal_ns or i in user_config_ns):
902 if typelist:
902 if typelist:
903 if type(user_ns[i]).__name__ in typelist:
903 if type(user_ns[i]).__name__ in typelist:
904 out.append(i)
904 out.append(i)
905 else:
905 else:
906 out.append(i)
906 out.append(i)
907 out.sort()
907 out.sort()
908 return out
908 return out
909
909
910 def magic_who(self, parameter_s=''):
910 def magic_who(self, parameter_s=''):
911 """Print all interactive variables, with some minimal formatting.
911 """Print all interactive variables, with some minimal formatting.
912
912
913 If any arguments are given, only variables whose type matches one of
913 If any arguments are given, only variables whose type matches one of
914 these are printed. For example:
914 these are printed. For example:
915
915
916 %who function str
916 %who function str
917
917
918 will only list functions and strings, excluding all other types of
918 will only list functions and strings, excluding all other types of
919 variables. To find the proper type names, simply use type(var) at a
919 variables. To find the proper type names, simply use type(var) at a
920 command line to see how python prints type names. For example:
920 command line to see how python prints type names. For example:
921
921
922 In [1]: type('hello')\\
922 In [1]: type('hello')\\
923 Out[1]: <type 'str'>
923 Out[1]: <type 'str'>
924
924
925 indicates that the type name for strings is 'str'.
925 indicates that the type name for strings is 'str'.
926
926
927 %who always excludes executed names loaded through your configuration
927 %who always excludes executed names loaded through your configuration
928 file and things which are internal to IPython.
928 file and things which are internal to IPython.
929
929
930 This is deliberate, as typically you may load many modules and the
930 This is deliberate, as typically you may load many modules and the
931 purpose of %who is to show you only what you've manually defined."""
931 purpose of %who is to show you only what you've manually defined."""
932
932
933 varlist = self.magic_who_ls(parameter_s)
933 varlist = self.magic_who_ls(parameter_s)
934 if not varlist:
934 if not varlist:
935 if parameter_s:
935 if parameter_s:
936 print 'No variables match your requested type.'
936 print 'No variables match your requested type.'
937 else:
937 else:
938 print 'Interactive namespace is empty.'
938 print 'Interactive namespace is empty.'
939 return
939 return
940
940
941 # if we have variables, move on...
941 # if we have variables, move on...
942 count = 0
942 count = 0
943 for i in varlist:
943 for i in varlist:
944 print i+'\t',
944 print i+'\t',
945 count += 1
945 count += 1
946 if count > 8:
946 if count > 8:
947 count = 0
947 count = 0
948 print
948 print
949 print
949 print
950
950
951 def magic_whos(self, parameter_s=''):
951 def magic_whos(self, parameter_s=''):
952 """Like %who, but gives some extra information about each variable.
952 """Like %who, but gives some extra information about each variable.
953
953
954 The same type filtering of %who can be applied here.
954 The same type filtering of %who can be applied here.
955
955
956 For all variables, the type is printed. Additionally it prints:
956 For all variables, the type is printed. Additionally it prints:
957
957
958 - For {},[],(): their length.
958 - For {},[],(): their length.
959
959
960 - For numpy and Numeric arrays, a summary with shape, number of
960 - For numpy and Numeric arrays, a summary with shape, number of
961 elements, typecode and size in memory.
961 elements, typecode and size in memory.
962
962
963 - Everything else: a string representation, snipping their middle if
963 - Everything else: a string representation, snipping their middle if
964 too long."""
964 too long."""
965
965
966 varnames = self.magic_who_ls(parameter_s)
966 varnames = self.magic_who_ls(parameter_s)
967 if not varnames:
967 if not varnames:
968 if parameter_s:
968 if parameter_s:
969 print 'No variables match your requested type.'
969 print 'No variables match your requested type.'
970 else:
970 else:
971 print 'Interactive namespace is empty.'
971 print 'Interactive namespace is empty.'
972 return
972 return
973
973
974 # if we have variables, move on...
974 # if we have variables, move on...
975
975
976 # for these types, show len() instead of data:
976 # for these types, show len() instead of data:
977 seq_types = [types.DictType,types.ListType,types.TupleType]
977 seq_types = [types.DictType,types.ListType,types.TupleType]
978
978
979 # for numpy/Numeric arrays, display summary info
979 # for numpy/Numeric arrays, display summary info
980 try:
980 try:
981 import numpy
981 import numpy
982 except ImportError:
982 except ImportError:
983 ndarray_type = None
983 ndarray_type = None
984 else:
984 else:
985 ndarray_type = numpy.ndarray.__name__
985 ndarray_type = numpy.ndarray.__name__
986 try:
986 try:
987 import Numeric
987 import Numeric
988 except ImportError:
988 except ImportError:
989 array_type = None
989 array_type = None
990 else:
990 else:
991 array_type = Numeric.ArrayType.__name__
991 array_type = Numeric.ArrayType.__name__
992
992
993 # Find all variable names and types so we can figure out column sizes
993 # Find all variable names and types so we can figure out column sizes
994 def get_vars(i):
994 def get_vars(i):
995 return self.shell.user_ns[i]
995 return self.shell.user_ns[i]
996
996
997 # some types are well known and can be shorter
997 # some types are well known and can be shorter
998 abbrevs = {'IPython.macro.Macro' : 'Macro'}
998 abbrevs = {'IPython.macro.Macro' : 'Macro'}
999 def type_name(v):
999 def type_name(v):
1000 tn = type(v).__name__
1000 tn = type(v).__name__
1001 return abbrevs.get(tn,tn)
1001 return abbrevs.get(tn,tn)
1002
1002
1003 varlist = map(get_vars,varnames)
1003 varlist = map(get_vars,varnames)
1004
1004
1005 typelist = []
1005 typelist = []
1006 for vv in varlist:
1006 for vv in varlist:
1007 tt = type_name(vv)
1007 tt = type_name(vv)
1008
1008
1009 if tt=='instance':
1009 if tt=='instance':
1010 typelist.append( abbrevs.get(str(vv.__class__),
1010 typelist.append( abbrevs.get(str(vv.__class__),
1011 str(vv.__class__)))
1011 str(vv.__class__)))
1012 else:
1012 else:
1013 typelist.append(tt)
1013 typelist.append(tt)
1014
1014
1015 # column labels and # of spaces as separator
1015 # column labels and # of spaces as separator
1016 varlabel = 'Variable'
1016 varlabel = 'Variable'
1017 typelabel = 'Type'
1017 typelabel = 'Type'
1018 datalabel = 'Data/Info'
1018 datalabel = 'Data/Info'
1019 colsep = 3
1019 colsep = 3
1020 # variable format strings
1020 # variable format strings
1021 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
1021 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
1022 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
1022 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
1023 aformat = "%s: %s elems, type `%s`, %s bytes"
1023 aformat = "%s: %s elems, type `%s`, %s bytes"
1024 # find the size of the columns to format the output nicely
1024 # find the size of the columns to format the output nicely
1025 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
1025 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
1026 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
1026 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
1027 # table header
1027 # table header
1028 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
1028 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
1029 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
1029 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
1030 # and the table itself
1030 # and the table itself
1031 kb = 1024
1031 kb = 1024
1032 Mb = 1048576 # kb**2
1032 Mb = 1048576 # kb**2
1033 for vname,var,vtype in zip(varnames,varlist,typelist):
1033 for vname,var,vtype in zip(varnames,varlist,typelist):
1034 print itpl(vformat),
1034 print itpl(vformat),
1035 if vtype in seq_types:
1035 if vtype in seq_types:
1036 print len(var)
1036 print len(var)
1037 elif vtype in [array_type,ndarray_type]:
1037 elif vtype in [array_type,ndarray_type]:
1038 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
1038 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
1039 if vtype==ndarray_type:
1039 if vtype==ndarray_type:
1040 # numpy
1040 # numpy
1041 vsize = var.size
1041 vsize = var.size
1042 vbytes = vsize*var.itemsize
1042 vbytes = vsize*var.itemsize
1043 vdtype = var.dtype
1043 vdtype = var.dtype
1044 else:
1044 else:
1045 # Numeric
1045 # Numeric
1046 vsize = Numeric.size(var)
1046 vsize = Numeric.size(var)
1047 vbytes = vsize*var.itemsize()
1047 vbytes = vsize*var.itemsize()
1048 vdtype = var.typecode()
1048 vdtype = var.typecode()
1049
1049
1050 if vbytes < 100000:
1050 if vbytes < 100000:
1051 print aformat % (vshape,vsize,vdtype,vbytes)
1051 print aformat % (vshape,vsize,vdtype,vbytes)
1052 else:
1052 else:
1053 print aformat % (vshape,vsize,vdtype,vbytes),
1053 print aformat % (vshape,vsize,vdtype,vbytes),
1054 if vbytes < Mb:
1054 if vbytes < Mb:
1055 print '(%s kb)' % (vbytes/kb,)
1055 print '(%s kb)' % (vbytes/kb,)
1056 else:
1056 else:
1057 print '(%s Mb)' % (vbytes/Mb,)
1057 print '(%s Mb)' % (vbytes/Mb,)
1058 else:
1058 else:
1059 try:
1059 try:
1060 vstr = str(var)
1060 vstr = str(var)
1061 except UnicodeEncodeError:
1061 except UnicodeEncodeError:
1062 vstr = unicode(var).encode(sys.getdefaultencoding(),
1062 vstr = unicode(var).encode(sys.getdefaultencoding(),
1063 'backslashreplace')
1063 'backslashreplace')
1064 vstr = vstr.replace('\n','\\n')
1064 vstr = vstr.replace('\n','\\n')
1065 if len(vstr) < 50:
1065 if len(vstr) < 50:
1066 print vstr
1066 print vstr
1067 else:
1067 else:
1068 printpl(vfmt_short)
1068 printpl(vfmt_short)
1069
1069
1070 def magic_reset(self, parameter_s=''):
1070 def magic_reset(self, parameter_s=''):
1071 """Resets the namespace by removing all names defined by the user.
1071 """Resets the namespace by removing all names defined by the user.
1072
1072
1073 Input/Output history are left around in case you need them."""
1073 Input/Output history are left around in case you need them."""
1074
1074
1075 ans = self.shell.ask_yes_no(
1075 ans = self.shell.ask_yes_no(
1076 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1076 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1077 if not ans:
1077 if not ans:
1078 print 'Nothing done.'
1078 print 'Nothing done.'
1079 return
1079 return
1080 user_ns = self.shell.user_ns
1080 user_ns = self.shell.user_ns
1081 for i in self.magic_who_ls():
1081 for i in self.magic_who_ls():
1082 del(user_ns[i])
1082 del(user_ns[i])
1083
1083
1084 def magic_logstart(self,parameter_s=''):
1084 def magic_logstart(self,parameter_s=''):
1085 """Start logging anywhere in a session.
1085 """Start logging anywhere in a session.
1086
1086
1087 %logstart [-o|-r|-t] [log_name [log_mode]]
1087 %logstart [-o|-r|-t] [log_name [log_mode]]
1088
1088
1089 If no name is given, it defaults to a file named 'ipython_log.py' in your
1089 If no name is given, it defaults to a file named 'ipython_log.py' in your
1090 current directory, in 'rotate' mode (see below).
1090 current directory, in 'rotate' mode (see below).
1091
1091
1092 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1092 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1093 history up to that point and then continues logging.
1093 history up to that point and then continues logging.
1094
1094
1095 %logstart takes a second optional parameter: logging mode. This can be one
1095 %logstart takes a second optional parameter: logging mode. This can be one
1096 of (note that the modes are given unquoted):\\
1096 of (note that the modes are given unquoted):\\
1097 append: well, that says it.\\
1097 append: well, that says it.\\
1098 backup: rename (if exists) to name~ and start name.\\
1098 backup: rename (if exists) to name~ and start name.\\
1099 global: single logfile in your home dir, appended to.\\
1099 global: single logfile in your home dir, appended to.\\
1100 over : overwrite existing log.\\
1100 over : overwrite existing log.\\
1101 rotate: create rotating logs name.1~, name.2~, etc.
1101 rotate: create rotating logs name.1~, name.2~, etc.
1102
1102
1103 Options:
1103 Options:
1104
1104
1105 -o: log also IPython's output. In this mode, all commands which
1105 -o: log also IPython's output. In this mode, all commands which
1106 generate an Out[NN] prompt are recorded to the logfile, right after
1106 generate an Out[NN] prompt are recorded to the logfile, right after
1107 their corresponding input line. The output lines are always
1107 their corresponding input line. The output lines are always
1108 prepended with a '#[Out]# ' marker, so that the log remains valid
1108 prepended with a '#[Out]# ' marker, so that the log remains valid
1109 Python code.
1109 Python code.
1110
1110
1111 Since this marker is always the same, filtering only the output from
1111 Since this marker is always the same, filtering only the output from
1112 a log is very easy, using for example a simple awk call:
1112 a log is very easy, using for example a simple awk call:
1113
1113
1114 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1114 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1115
1115
1116 -r: log 'raw' input. Normally, IPython's logs contain the processed
1116 -r: log 'raw' input. Normally, IPython's logs contain the processed
1117 input, so that user lines are logged in their final form, converted
1117 input, so that user lines are logged in their final form, converted
1118 into valid Python. For example, %Exit is logged as
1118 into valid Python. For example, %Exit is logged as
1119 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1119 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1120 exactly as typed, with no transformations applied.
1120 exactly as typed, with no transformations applied.
1121
1121
1122 -t: put timestamps before each input line logged (these are put in
1122 -t: put timestamps before each input line logged (these are put in
1123 comments)."""
1123 comments)."""
1124
1124
1125 opts,par = self.parse_options(parameter_s,'ort')
1125 opts,par = self.parse_options(parameter_s,'ort')
1126 log_output = 'o' in opts
1126 log_output = 'o' in opts
1127 log_raw_input = 'r' in opts
1127 log_raw_input = 'r' in opts
1128 timestamp = 't' in opts
1128 timestamp = 't' in opts
1129
1129
1130 rc = self.shell.rc
1130 rc = self.shell.rc
1131 logger = self.shell.logger
1131 logger = self.shell.logger
1132
1132
1133 # if no args are given, the defaults set in the logger constructor by
1133 # if no args are given, the defaults set in the logger constructor by
1134 # ipytohn remain valid
1134 # ipytohn remain valid
1135 if par:
1135 if par:
1136 try:
1136 try:
1137 logfname,logmode = par.split()
1137 logfname,logmode = par.split()
1138 except:
1138 except:
1139 logfname = par
1139 logfname = par
1140 logmode = 'backup'
1140 logmode = 'backup'
1141 else:
1141 else:
1142 logfname = logger.logfname
1142 logfname = logger.logfname
1143 logmode = logger.logmode
1143 logmode = logger.logmode
1144 # put logfname into rc struct as if it had been called on the command
1144 # put logfname into rc struct as if it had been called on the command
1145 # line, so it ends up saved in the log header Save it in case we need
1145 # line, so it ends up saved in the log header Save it in case we need
1146 # to restore it...
1146 # to restore it...
1147 old_logfile = rc.opts.get('logfile','')
1147 old_logfile = rc.opts.get('logfile','')
1148 if logfname:
1148 if logfname:
1149 logfname = os.path.expanduser(logfname)
1149 logfname = os.path.expanduser(logfname)
1150 rc.opts.logfile = logfname
1150 rc.opts.logfile = logfname
1151 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1151 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1152 try:
1152 try:
1153 started = logger.logstart(logfname,loghead,logmode,
1153 started = logger.logstart(logfname,loghead,logmode,
1154 log_output,timestamp,log_raw_input)
1154 log_output,timestamp,log_raw_input)
1155 except:
1155 except:
1156 rc.opts.logfile = old_logfile
1156 rc.opts.logfile = old_logfile
1157 warn("Couldn't start log: %s" % sys.exc_info()[1])
1157 warn("Couldn't start log: %s" % sys.exc_info()[1])
1158 else:
1158 else:
1159 # log input history up to this point, optionally interleaving
1159 # log input history up to this point, optionally interleaving
1160 # output if requested
1160 # output if requested
1161
1161
1162 if timestamp:
1162 if timestamp:
1163 # disable timestamping for the previous history, since we've
1163 # disable timestamping for the previous history, since we've
1164 # lost those already (no time machine here).
1164 # lost those already (no time machine here).
1165 logger.timestamp = False
1165 logger.timestamp = False
1166
1166
1167 if log_raw_input:
1167 if log_raw_input:
1168 input_hist = self.shell.input_hist_raw
1168 input_hist = self.shell.input_hist_raw
1169 else:
1169 else:
1170 input_hist = self.shell.input_hist
1170 input_hist = self.shell.input_hist
1171
1171
1172 if log_output:
1172 if log_output:
1173 log_write = logger.log_write
1173 log_write = logger.log_write
1174 output_hist = self.shell.output_hist
1174 output_hist = self.shell.output_hist
1175 for n in range(1,len(input_hist)-1):
1175 for n in range(1,len(input_hist)-1):
1176 log_write(input_hist[n].rstrip())
1176 log_write(input_hist[n].rstrip())
1177 if n in output_hist:
1177 if n in output_hist:
1178 log_write(repr(output_hist[n]),'output')
1178 log_write(repr(output_hist[n]),'output')
1179 else:
1179 else:
1180 logger.log_write(input_hist[1:])
1180 logger.log_write(input_hist[1:])
1181 if timestamp:
1181 if timestamp:
1182 # re-enable timestamping
1182 # re-enable timestamping
1183 logger.timestamp = True
1183 logger.timestamp = True
1184
1184
1185 print ('Activating auto-logging. '
1185 print ('Activating auto-logging. '
1186 'Current session state plus future input saved.')
1186 'Current session state plus future input saved.')
1187 logger.logstate()
1187 logger.logstate()
1188
1188
1189 def magic_logoff(self,parameter_s=''):
1189 def magic_logoff(self,parameter_s=''):
1190 """Temporarily stop logging.
1190 """Temporarily stop logging.
1191
1191
1192 You must have previously started logging."""
1192 You must have previously started logging."""
1193 self.shell.logger.switch_log(0)
1193 self.shell.logger.switch_log(0)
1194
1194
1195 def magic_logon(self,parameter_s=''):
1195 def magic_logon(self,parameter_s=''):
1196 """Restart logging.
1196 """Restart logging.
1197
1197
1198 This function is for restarting logging which you've temporarily
1198 This function is for restarting logging which you've temporarily
1199 stopped with %logoff. For starting logging for the first time, you
1199 stopped with %logoff. For starting logging for the first time, you
1200 must use the %logstart function, which allows you to specify an
1200 must use the %logstart function, which allows you to specify an
1201 optional log filename."""
1201 optional log filename."""
1202
1202
1203 self.shell.logger.switch_log(1)
1203 self.shell.logger.switch_log(1)
1204
1204
1205 def magic_logstate(self,parameter_s=''):
1205 def magic_logstate(self,parameter_s=''):
1206 """Print the status of the logging system."""
1206 """Print the status of the logging system."""
1207
1207
1208 self.shell.logger.logstate()
1208 self.shell.logger.logstate()
1209
1209
1210 def magic_pdb(self, parameter_s=''):
1210 def magic_pdb(self, parameter_s=''):
1211 """Control the automatic calling of the pdb interactive debugger.
1211 """Control the automatic calling of the pdb interactive debugger.
1212
1212
1213 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1213 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1214 argument it works as a toggle.
1214 argument it works as a toggle.
1215
1215
1216 When an exception is triggered, IPython can optionally call the
1216 When an exception is triggered, IPython can optionally call the
1217 interactive pdb debugger after the traceback printout. %pdb toggles
1217 interactive pdb debugger after the traceback printout. %pdb toggles
1218 this feature on and off.
1218 this feature on and off.
1219
1219
1220 The initial state of this feature is set in your ipythonrc
1220 The initial state of this feature is set in your ipythonrc
1221 configuration file (the variable is called 'pdb').
1221 configuration file (the variable is called 'pdb').
1222
1222
1223 If you want to just activate the debugger AFTER an exception has fired,
1223 If you want to just activate the debugger AFTER an exception has fired,
1224 without having to type '%pdb on' and rerunning your code, you can use
1224 without having to type '%pdb on' and rerunning your code, you can use
1225 the %debug magic."""
1225 the %debug magic."""
1226
1226
1227 par = parameter_s.strip().lower()
1227 par = parameter_s.strip().lower()
1228
1228
1229 if par:
1229 if par:
1230 try:
1230 try:
1231 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1231 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1232 except KeyError:
1232 except KeyError:
1233 print ('Incorrect argument. Use on/1, off/0, '
1233 print ('Incorrect argument. Use on/1, off/0, '
1234 'or nothing for a toggle.')
1234 'or nothing for a toggle.')
1235 return
1235 return
1236 else:
1236 else:
1237 # toggle
1237 # toggle
1238 new_pdb = not self.shell.call_pdb
1238 new_pdb = not self.shell.call_pdb
1239
1239
1240 # set on the shell
1240 # set on the shell
1241 self.shell.call_pdb = new_pdb
1241 self.shell.call_pdb = new_pdb
1242 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1242 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1243
1243
1244 def magic_debug(self, parameter_s=''):
1244 def magic_debug(self, parameter_s=''):
1245 """Activate the interactive debugger in post-mortem mode.
1245 """Activate the interactive debugger in post-mortem mode.
1246
1246
1247 If an exception has just occurred, this lets you inspect its stack
1247 If an exception has just occurred, this lets you inspect its stack
1248 frames interactively. Note that this will always work only on the last
1248 frames interactively. Note that this will always work only on the last
1249 traceback that occurred, so you must call this quickly after an
1249 traceback that occurred, so you must call this quickly after an
1250 exception that you wish to inspect has fired, because if another one
1250 exception that you wish to inspect has fired, because if another one
1251 occurs, it clobbers the previous one.
1251 occurs, it clobbers the previous one.
1252
1252
1253 If you want IPython to automatically do this on every exception, see
1253 If you want IPython to automatically do this on every exception, see
1254 the %pdb magic for more details.
1254 the %pdb magic for more details.
1255 """
1255 """
1256
1256
1257 self.shell.debugger(force=True)
1257 self.shell.debugger(force=True)
1258
1258
1259 def magic_prun(self, parameter_s ='',user_mode=1,
1259 def magic_prun(self, parameter_s ='',user_mode=1,
1260 opts=None,arg_lst=None,prog_ns=None):
1260 opts=None,arg_lst=None,prog_ns=None):
1261
1261
1262 """Run a statement through the python code profiler.
1262 """Run a statement through the python code profiler.
1263
1263
1264 Usage:\\
1264 Usage:\\
1265 %prun [options] statement
1265 %prun [options] statement
1266
1266
1267 The given statement (which doesn't require quote marks) is run via the
1267 The given statement (which doesn't require quote marks) is run via the
1268 python profiler in a manner similar to the profile.run() function.
1268 python profiler in a manner similar to the profile.run() function.
1269 Namespaces are internally managed to work correctly; profile.run
1269 Namespaces are internally managed to work correctly; profile.run
1270 cannot be used in IPython because it makes certain assumptions about
1270 cannot be used in IPython because it makes certain assumptions about
1271 namespaces which do not hold under IPython.
1271 namespaces which do not hold under IPython.
1272
1272
1273 Options:
1273 Options:
1274
1274
1275 -l <limit>: you can place restrictions on what or how much of the
1275 -l <limit>: you can place restrictions on what or how much of the
1276 profile gets printed. The limit value can be:
1276 profile gets printed. The limit value can be:
1277
1277
1278 * A string: only information for function names containing this string
1278 * A string: only information for function names containing this string
1279 is printed.
1279 is printed.
1280
1280
1281 * An integer: only these many lines are printed.
1281 * An integer: only these many lines are printed.
1282
1282
1283 * A float (between 0 and 1): this fraction of the report is printed
1283 * A float (between 0 and 1): this fraction of the report is printed
1284 (for example, use a limit of 0.4 to see the topmost 40% only).
1284 (for example, use a limit of 0.4 to see the topmost 40% only).
1285
1285
1286 You can combine several limits with repeated use of the option. For
1286 You can combine several limits with repeated use of the option. For
1287 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1287 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1288 information about class constructors.
1288 information about class constructors.
1289
1289
1290 -r: return the pstats.Stats object generated by the profiling. This
1290 -r: return the pstats.Stats object generated by the profiling. This
1291 object has all the information about the profile in it, and you can
1291 object has all the information about the profile in it, and you can
1292 later use it for further analysis or in other functions.
1292 later use it for further analysis or in other functions.
1293
1293
1294 -s <key>: sort profile by given key. You can provide more than one key
1294 -s <key>: sort profile by given key. You can provide more than one key
1295 by using the option several times: '-s key1 -s key2 -s key3...'. The
1295 by using the option several times: '-s key1 -s key2 -s key3...'. The
1296 default sorting key is 'time'.
1296 default sorting key is 'time'.
1297
1297
1298 The following is copied verbatim from the profile documentation
1298 The following is copied verbatim from the profile documentation
1299 referenced below:
1299 referenced below:
1300
1300
1301 When more than one key is provided, additional keys are used as
1301 When more than one key is provided, additional keys are used as
1302 secondary criteria when the there is equality in all keys selected
1302 secondary criteria when the there is equality in all keys selected
1303 before them.
1303 before them.
1304
1304
1305 Abbreviations can be used for any key names, as long as the
1305 Abbreviations can be used for any key names, as long as the
1306 abbreviation is unambiguous. The following are the keys currently
1306 abbreviation is unambiguous. The following are the keys currently
1307 defined:
1307 defined:
1308
1308
1309 Valid Arg Meaning\\
1309 Valid Arg Meaning\\
1310 "calls" call count\\
1310 "calls" call count\\
1311 "cumulative" cumulative time\\
1311 "cumulative" cumulative time\\
1312 "file" file name\\
1312 "file" file name\\
1313 "module" file name\\
1313 "module" file name\\
1314 "pcalls" primitive call count\\
1314 "pcalls" primitive call count\\
1315 "line" line number\\
1315 "line" line number\\
1316 "name" function name\\
1316 "name" function name\\
1317 "nfl" name/file/line\\
1317 "nfl" name/file/line\\
1318 "stdname" standard name\\
1318 "stdname" standard name\\
1319 "time" internal time
1319 "time" internal time
1320
1320
1321 Note that all sorts on statistics are in descending order (placing
1321 Note that all sorts on statistics are in descending order (placing
1322 most time consuming items first), where as name, file, and line number
1322 most time consuming items first), where as name, file, and line number
1323 searches are in ascending order (i.e., alphabetical). The subtle
1323 searches are in ascending order (i.e., alphabetical). The subtle
1324 distinction between "nfl" and "stdname" is that the standard name is a
1324 distinction between "nfl" and "stdname" is that the standard name is a
1325 sort of the name as printed, which means that the embedded line
1325 sort of the name as printed, which means that the embedded line
1326 numbers get compared in an odd way. For example, lines 3, 20, and 40
1326 numbers get compared in an odd way. For example, lines 3, 20, and 40
1327 would (if the file names were the same) appear in the string order
1327 would (if the file names were the same) appear in the string order
1328 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1328 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1329 line numbers. In fact, sort_stats("nfl") is the same as
1329 line numbers. In fact, sort_stats("nfl") is the same as
1330 sort_stats("name", "file", "line").
1330 sort_stats("name", "file", "line").
1331
1331
1332 -T <filename>: save profile results as shown on screen to a text
1332 -T <filename>: save profile results as shown on screen to a text
1333 file. The profile is still shown on screen.
1333 file. The profile is still shown on screen.
1334
1334
1335 -D <filename>: save (via dump_stats) profile statistics to given
1335 -D <filename>: save (via dump_stats) profile statistics to given
1336 filename. This data is in a format understod by the pstats module, and
1336 filename. This data is in a format understod by the pstats module, and
1337 is generated by a call to the dump_stats() method of profile
1337 is generated by a call to the dump_stats() method of profile
1338 objects. The profile is still shown on screen.
1338 objects. The profile is still shown on screen.
1339
1339
1340 If you want to run complete programs under the profiler's control, use
1340 If you want to run complete programs under the profiler's control, use
1341 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1341 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1342 contains profiler specific options as described here.
1342 contains profiler specific options as described here.
1343
1343
1344 You can read the complete documentation for the profile module with:\\
1344 You can read the complete documentation for the profile module with:\\
1345 In [1]: import profile; profile.help() """
1345 In [1]: import profile; profile.help() """
1346
1346
1347 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1347 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1348 # protect user quote marks
1348 # protect user quote marks
1349 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1349 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1350
1350
1351 if user_mode: # regular user call
1351 if user_mode: # regular user call
1352 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1352 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1353 list_all=1)
1353 list_all=1)
1354 namespace = self.shell.user_ns
1354 namespace = self.shell.user_ns
1355 else: # called to run a program by %run -p
1355 else: # called to run a program by %run -p
1356 try:
1356 try:
1357 filename = get_py_filename(arg_lst[0])
1357 filename = get_py_filename(arg_lst[0])
1358 except IOError,msg:
1358 except IOError,msg:
1359 error(msg)
1359 error(msg)
1360 return
1360 return
1361
1361
1362 arg_str = 'execfile(filename,prog_ns)'
1362 arg_str = 'execfile(filename,prog_ns)'
1363 namespace = locals()
1363 namespace = locals()
1364
1364
1365 opts.merge(opts_def)
1365 opts.merge(opts_def)
1366
1366
1367 prof = profile.Profile()
1367 prof = profile.Profile()
1368 try:
1368 try:
1369 prof = prof.runctx(arg_str,namespace,namespace)
1369 prof = prof.runctx(arg_str,namespace,namespace)
1370 sys_exit = ''
1370 sys_exit = ''
1371 except SystemExit:
1371 except SystemExit:
1372 sys_exit = """*** SystemExit exception caught in code being profiled."""
1372 sys_exit = """*** SystemExit exception caught in code being profiled."""
1373
1373
1374 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1374 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1375
1375
1376 lims = opts.l
1376 lims = opts.l
1377 if lims:
1377 if lims:
1378 lims = [] # rebuild lims with ints/floats/strings
1378 lims = [] # rebuild lims with ints/floats/strings
1379 for lim in opts.l:
1379 for lim in opts.l:
1380 try:
1380 try:
1381 lims.append(int(lim))
1381 lims.append(int(lim))
1382 except ValueError:
1382 except ValueError:
1383 try:
1383 try:
1384 lims.append(float(lim))
1384 lims.append(float(lim))
1385 except ValueError:
1385 except ValueError:
1386 lims.append(lim)
1386 lims.append(lim)
1387
1387
1388 # Trap output.
1388 # Trap output.
1389 stdout_trap = StringIO()
1389 stdout_trap = StringIO()
1390
1390
1391 if hasattr(stats,'stream'):
1391 if hasattr(stats,'stream'):
1392 # In newer versions of python, the stats object has a 'stream'
1392 # In newer versions of python, the stats object has a 'stream'
1393 # attribute to write into.
1393 # attribute to write into.
1394 stats.stream = stdout_trap
1394 stats.stream = stdout_trap
1395 stats.print_stats(*lims)
1395 stats.print_stats(*lims)
1396 else:
1396 else:
1397 # For older versions, we manually redirect stdout during printing
1397 # For older versions, we manually redirect stdout during printing
1398 sys_stdout = sys.stdout
1398 sys_stdout = sys.stdout
1399 try:
1399 try:
1400 sys.stdout = stdout_trap
1400 sys.stdout = stdout_trap
1401 stats.print_stats(*lims)
1401 stats.print_stats(*lims)
1402 finally:
1402 finally:
1403 sys.stdout = sys_stdout
1403 sys.stdout = sys_stdout
1404
1404
1405 output = stdout_trap.getvalue()
1405 output = stdout_trap.getvalue()
1406 output = output.rstrip()
1406 output = output.rstrip()
1407
1407
1408 page(output,screen_lines=self.shell.rc.screen_length)
1408 page(output,screen_lines=self.shell.rc.screen_length)
1409 print sys_exit,
1409 print sys_exit,
1410
1410
1411 dump_file = opts.D[0]
1411 dump_file = opts.D[0]
1412 text_file = opts.T[0]
1412 text_file = opts.T[0]
1413 if dump_file:
1413 if dump_file:
1414 prof.dump_stats(dump_file)
1414 prof.dump_stats(dump_file)
1415 print '\n*** Profile stats marshalled to file',\
1415 print '\n*** Profile stats marshalled to file',\
1416 `dump_file`+'.',sys_exit
1416 `dump_file`+'.',sys_exit
1417 if text_file:
1417 if text_file:
1418 pfile = file(text_file,'w')
1418 pfile = file(text_file,'w')
1419 pfile.write(output)
1419 pfile.write(output)
1420 pfile.close()
1420 pfile.close()
1421 print '\n*** Profile printout saved to text file',\
1421 print '\n*** Profile printout saved to text file',\
1422 `text_file`+'.',sys_exit
1422 `text_file`+'.',sys_exit
1423
1423
1424 if opts.has_key('r'):
1424 if opts.has_key('r'):
1425 return stats
1425 return stats
1426 else:
1426 else:
1427 return None
1427 return None
1428
1428
1429 def magic_run(self, parameter_s ='',runner=None):
1429 def magic_run(self, parameter_s ='',runner=None):
1430 """Run the named file inside IPython as a program.
1430 """Run the named file inside IPython as a program.
1431
1431
1432 Usage:\\
1432 Usage:\\
1433 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1433 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1434
1434
1435 Parameters after the filename are passed as command-line arguments to
1435 Parameters after the filename are passed as command-line arguments to
1436 the program (put in sys.argv). Then, control returns to IPython's
1436 the program (put in sys.argv). Then, control returns to IPython's
1437 prompt.
1437 prompt.
1438
1438
1439 This is similar to running at a system prompt:\\
1439 This is similar to running at a system prompt:\\
1440 $ python file args\\
1440 $ python file args\\
1441 but with the advantage of giving you IPython's tracebacks, and of
1441 but with the advantage of giving you IPython's tracebacks, and of
1442 loading all variables into your interactive namespace for further use
1442 loading all variables into your interactive namespace for further use
1443 (unless -p is used, see below).
1443 (unless -p is used, see below).
1444
1444
1445 The file is executed in a namespace initially consisting only of
1445 The file is executed in a namespace initially consisting only of
1446 __name__=='__main__' and sys.argv constructed as indicated. It thus
1446 __name__=='__main__' and sys.argv constructed as indicated. It thus
1447 sees its environment as if it were being run as a stand-alone
1447 sees its environment as if it were being run as a stand-alone
1448 program. But after execution, the IPython interactive namespace gets
1448 program. But after execution, the IPython interactive namespace gets
1449 updated with all variables defined in the program (except for __name__
1449 updated with all variables defined in the program (except for __name__
1450 and sys.argv). This allows for very convenient loading of code for
1450 and sys.argv). This allows for very convenient loading of code for
1451 interactive work, while giving each program a 'clean sheet' to run in.
1451 interactive work, while giving each program a 'clean sheet' to run in.
1452
1452
1453 Options:
1453 Options:
1454
1454
1455 -n: __name__ is NOT set to '__main__', but to the running file's name
1455 -n: __name__ is NOT set to '__main__', but to the running file's name
1456 without extension (as python does under import). This allows running
1456 without extension (as python does under import). This allows running
1457 scripts and reloading the definitions in them without calling code
1457 scripts and reloading the definitions in them without calling code
1458 protected by an ' if __name__ == "__main__" ' clause.
1458 protected by an ' if __name__ == "__main__" ' clause.
1459
1459
1460 -i: run the file in IPython's namespace instead of an empty one. This
1460 -i: run the file in IPython's namespace instead of an empty one. This
1461 is useful if you are experimenting with code written in a text editor
1461 is useful if you are experimenting with code written in a text editor
1462 which depends on variables defined interactively.
1462 which depends on variables defined interactively.
1463
1463
1464 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1464 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1465 being run. This is particularly useful if IPython is being used to
1465 being run. This is particularly useful if IPython is being used to
1466 run unittests, which always exit with a sys.exit() call. In such
1466 run unittests, which always exit with a sys.exit() call. In such
1467 cases you are interested in the output of the test results, not in
1467 cases you are interested in the output of the test results, not in
1468 seeing a traceback of the unittest module.
1468 seeing a traceback of the unittest module.
1469
1469
1470 -t: print timing information at the end of the run. IPython will give
1470 -t: print timing information at the end of the run. IPython will give
1471 you an estimated CPU time consumption for your script, which under
1471 you an estimated CPU time consumption for your script, which under
1472 Unix uses the resource module to avoid the wraparound problems of
1472 Unix uses the resource module to avoid the wraparound problems of
1473 time.clock(). Under Unix, an estimate of time spent on system tasks
1473 time.clock(). Under Unix, an estimate of time spent on system tasks
1474 is also given (for Windows platforms this is reported as 0.0).
1474 is also given (for Windows platforms this is reported as 0.0).
1475
1475
1476 If -t is given, an additional -N<N> option can be given, where <N>
1476 If -t is given, an additional -N<N> option can be given, where <N>
1477 must be an integer indicating how many times you want the script to
1477 must be an integer indicating how many times you want the script to
1478 run. The final timing report will include total and per run results.
1478 run. The final timing report will include total and per run results.
1479
1479
1480 For example (testing the script uniq_stable.py):
1480 For example (testing the script uniq_stable.py):
1481
1481
1482 In [1]: run -t uniq_stable
1482 In [1]: run -t uniq_stable
1483
1483
1484 IPython CPU timings (estimated):\\
1484 IPython CPU timings (estimated):\\
1485 User : 0.19597 s.\\
1485 User : 0.19597 s.\\
1486 System: 0.0 s.\\
1486 System: 0.0 s.\\
1487
1487
1488 In [2]: run -t -N5 uniq_stable
1488 In [2]: run -t -N5 uniq_stable
1489
1489
1490 IPython CPU timings (estimated):\\
1490 IPython CPU timings (estimated):\\
1491 Total runs performed: 5\\
1491 Total runs performed: 5\\
1492 Times : Total Per run\\
1492 Times : Total Per run\\
1493 User : 0.910862 s, 0.1821724 s.\\
1493 User : 0.910862 s, 0.1821724 s.\\
1494 System: 0.0 s, 0.0 s.
1494 System: 0.0 s, 0.0 s.
1495
1495
1496 -d: run your program under the control of pdb, the Python debugger.
1496 -d: run your program under the control of pdb, the Python debugger.
1497 This allows you to execute your program step by step, watch variables,
1497 This allows you to execute your program step by step, watch variables,
1498 etc. Internally, what IPython does is similar to calling:
1498 etc. Internally, what IPython does is similar to calling:
1499
1499
1500 pdb.run('execfile("YOURFILENAME")')
1500 pdb.run('execfile("YOURFILENAME")')
1501
1501
1502 with a breakpoint set on line 1 of your file. You can change the line
1502 with a breakpoint set on line 1 of your file. You can change the line
1503 number for this automatic breakpoint to be <N> by using the -bN option
1503 number for this automatic breakpoint to be <N> by using the -bN option
1504 (where N must be an integer). For example:
1504 (where N must be an integer). For example:
1505
1505
1506 %run -d -b40 myscript
1506 %run -d -b40 myscript
1507
1507
1508 will set the first breakpoint at line 40 in myscript.py. Note that
1508 will set the first breakpoint at line 40 in myscript.py. Note that
1509 the first breakpoint must be set on a line which actually does
1509 the first breakpoint must be set on a line which actually does
1510 something (not a comment or docstring) for it to stop execution.
1510 something (not a comment or docstring) for it to stop execution.
1511
1511
1512 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1512 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1513 first enter 'c' (without qoutes) to start execution up to the first
1513 first enter 'c' (without qoutes) to start execution up to the first
1514 breakpoint.
1514 breakpoint.
1515
1515
1516 Entering 'help' gives information about the use of the debugger. You
1516 Entering 'help' gives information about the use of the debugger. You
1517 can easily see pdb's full documentation with "import pdb;pdb.help()"
1517 can easily see pdb's full documentation with "import pdb;pdb.help()"
1518 at a prompt.
1518 at a prompt.
1519
1519
1520 -p: run program under the control of the Python profiler module (which
1520 -p: run program under the control of the Python profiler module (which
1521 prints a detailed report of execution times, function calls, etc).
1521 prints a detailed report of execution times, function calls, etc).
1522
1522
1523 You can pass other options after -p which affect the behavior of the
1523 You can pass other options after -p which affect the behavior of the
1524 profiler itself. See the docs for %prun for details.
1524 profiler itself. See the docs for %prun for details.
1525
1525
1526 In this mode, the program's variables do NOT propagate back to the
1526 In this mode, the program's variables do NOT propagate back to the
1527 IPython interactive namespace (because they remain in the namespace
1527 IPython interactive namespace (because they remain in the namespace
1528 where the profiler executes them).
1528 where the profiler executes them).
1529
1529
1530 Internally this triggers a call to %prun, see its documentation for
1530 Internally this triggers a call to %prun, see its documentation for
1531 details on the options available specifically for profiling.
1531 details on the options available specifically for profiling.
1532
1532
1533 There is one special usage for which the text above doesn't apply:
1533 There is one special usage for which the text above doesn't apply:
1534 if the filename ends with .ipy, the file is run as ipython script,
1534 if the filename ends with .ipy, the file is run as ipython script,
1535 just as if the commands were written on IPython prompt.
1535 just as if the commands were written on IPython prompt.
1536 """
1536 """
1537
1537
1538 # get arguments and set sys.argv for program to be run.
1538 # get arguments and set sys.argv for program to be run.
1539 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1539 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1540 mode='list',list_all=1)
1540 mode='list',list_all=1)
1541
1541
1542 try:
1542 try:
1543 filename = get_py_filename(arg_lst[0])
1543 filename = get_py_filename(arg_lst[0])
1544 except IndexError:
1544 except IndexError:
1545 warn('you must provide at least a filename.')
1545 warn('you must provide at least a filename.')
1546 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1546 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1547 return
1547 return
1548 except IOError,msg:
1548 except IOError,msg:
1549 error(msg)
1549 error(msg)
1550 return
1550 return
1551
1551
1552 if filename.lower().endswith('.ipy'):
1552 if filename.lower().endswith('.ipy'):
1553 self.api.runlines(open(filename).read())
1553 self.api.runlines(open(filename).read())
1554 return
1554 return
1555
1555
1556 # Control the response to exit() calls made by the script being run
1556 # Control the response to exit() calls made by the script being run
1557 exit_ignore = opts.has_key('e')
1557 exit_ignore = opts.has_key('e')
1558
1558
1559 # Make sure that the running script gets a proper sys.argv as if it
1559 # Make sure that the running script gets a proper sys.argv as if it
1560 # were run from a system shell.
1560 # were run from a system shell.
1561 save_argv = sys.argv # save it for later restoring
1561 save_argv = sys.argv # save it for later restoring
1562 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1562 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1563
1563
1564 if opts.has_key('i'):
1564 if opts.has_key('i'):
1565 prog_ns = self.shell.user_ns
1565 prog_ns = self.shell.user_ns
1566 __name__save = self.shell.user_ns['__name__']
1566 __name__save = self.shell.user_ns['__name__']
1567 prog_ns['__name__'] = '__main__'
1567 prog_ns['__name__'] = '__main__'
1568 else:
1568 else:
1569 if opts.has_key('n'):
1569 if opts.has_key('n'):
1570 name = os.path.splitext(os.path.basename(filename))[0]
1570 name = os.path.splitext(os.path.basename(filename))[0]
1571 else:
1571 else:
1572 name = '__main__'
1572 name = '__main__'
1573 prog_ns = {'__name__':name}
1573 prog_ns = {'__name__':name}
1574
1574
1575 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1575 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1576 # set the __file__ global in the script's namespace
1576 # set the __file__ global in the script's namespace
1577 prog_ns['__file__'] = filename
1577 prog_ns['__file__'] = filename
1578
1578
1579 # pickle fix. See iplib for an explanation. But we need to make sure
1579 # pickle fix. See iplib for an explanation. But we need to make sure
1580 # that, if we overwrite __main__, we replace it at the end
1580 # that, if we overwrite __main__, we replace it at the end
1581 if prog_ns['__name__'] == '__main__':
1581 if prog_ns['__name__'] == '__main__':
1582 restore_main = sys.modules['__main__']
1582 restore_main = sys.modules['__main__']
1583 else:
1583 else:
1584 restore_main = False
1584 restore_main = False
1585
1585
1586 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1586 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1587
1587
1588 stats = None
1588 stats = None
1589 try:
1589 try:
1590 if self.shell.has_readline:
1590 if self.shell.has_readline:
1591 self.shell.savehist()
1591 self.shell.savehist()
1592
1592
1593 if opts.has_key('p'):
1593 if opts.has_key('p'):
1594 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1594 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1595 else:
1595 else:
1596 if opts.has_key('d'):
1596 if opts.has_key('d'):
1597 deb = Debugger.Pdb(self.shell.rc.colors)
1597 deb = Debugger.Pdb(self.shell.rc.colors)
1598 # reset Breakpoint state, which is moronically kept
1598 # reset Breakpoint state, which is moronically kept
1599 # in a class
1599 # in a class
1600 bdb.Breakpoint.next = 1
1600 bdb.Breakpoint.next = 1
1601 bdb.Breakpoint.bplist = {}
1601 bdb.Breakpoint.bplist = {}
1602 bdb.Breakpoint.bpbynumber = [None]
1602 bdb.Breakpoint.bpbynumber = [None]
1603 # Set an initial breakpoint to stop execution
1603 # Set an initial breakpoint to stop execution
1604 maxtries = 10
1604 maxtries = 10
1605 bp = int(opts.get('b',[1])[0])
1605 bp = int(opts.get('b',[1])[0])
1606 checkline = deb.checkline(filename,bp)
1606 checkline = deb.checkline(filename,bp)
1607 if not checkline:
1607 if not checkline:
1608 for bp in range(bp+1,bp+maxtries+1):
1608 for bp in range(bp+1,bp+maxtries+1):
1609 if deb.checkline(filename,bp):
1609 if deb.checkline(filename,bp):
1610 break
1610 break
1611 else:
1611 else:
1612 msg = ("\nI failed to find a valid line to set "
1612 msg = ("\nI failed to find a valid line to set "
1613 "a breakpoint\n"
1613 "a breakpoint\n"
1614 "after trying up to line: %s.\n"
1614 "after trying up to line: %s.\n"
1615 "Please set a valid breakpoint manually "
1615 "Please set a valid breakpoint manually "
1616 "with the -b option." % bp)
1616 "with the -b option." % bp)
1617 error(msg)
1617 error(msg)
1618 return
1618 return
1619 # if we find a good linenumber, set the breakpoint
1619 # if we find a good linenumber, set the breakpoint
1620 deb.do_break('%s:%s' % (filename,bp))
1620 deb.do_break('%s:%s' % (filename,bp))
1621 # Start file run
1621 # Start file run
1622 print "NOTE: Enter 'c' at the",
1622 print "NOTE: Enter 'c' at the",
1623 print "%s prompt to start your script." % deb.prompt
1623 print "%s prompt to start your script." % deb.prompt
1624 try:
1624 try:
1625 deb.run('execfile("%s")' % filename,prog_ns)
1625 deb.run('execfile("%s")' % filename,prog_ns)
1626
1626
1627 except:
1627 except:
1628 etype, value, tb = sys.exc_info()
1628 etype, value, tb = sys.exc_info()
1629 # Skip three frames in the traceback: the %run one,
1629 # Skip three frames in the traceback: the %run one,
1630 # one inside bdb.py, and the command-line typed by the
1630 # one inside bdb.py, and the command-line typed by the
1631 # user (run by exec in pdb itself).
1631 # user (run by exec in pdb itself).
1632 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1632 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1633 else:
1633 else:
1634 if runner is None:
1634 if runner is None:
1635 runner = self.shell.safe_execfile
1635 runner = self.shell.safe_execfile
1636 if opts.has_key('t'):
1636 if opts.has_key('t'):
1637 try:
1637 try:
1638 nruns = int(opts['N'][0])
1638 nruns = int(opts['N'][0])
1639 if nruns < 1:
1639 if nruns < 1:
1640 error('Number of runs must be >=1')
1640 error('Number of runs must be >=1')
1641 return
1641 return
1642 except (KeyError):
1642 except (KeyError):
1643 nruns = 1
1643 nruns = 1
1644 if nruns == 1:
1644 if nruns == 1:
1645 t0 = clock2()
1645 t0 = clock2()
1646 runner(filename,prog_ns,prog_ns,
1646 runner(filename,prog_ns,prog_ns,
1647 exit_ignore=exit_ignore)
1647 exit_ignore=exit_ignore)
1648 t1 = clock2()
1648 t1 = clock2()
1649 t_usr = t1[0]-t0[0]
1649 t_usr = t1[0]-t0[0]
1650 t_sys = t1[1]-t1[1]
1650 t_sys = t1[1]-t1[1]
1651 print "\nIPython CPU timings (estimated):"
1651 print "\nIPython CPU timings (estimated):"
1652 print " User : %10s s." % t_usr
1652 print " User : %10s s." % t_usr
1653 print " System: %10s s." % t_sys
1653 print " System: %10s s." % t_sys
1654 else:
1654 else:
1655 runs = range(nruns)
1655 runs = range(nruns)
1656 t0 = clock2()
1656 t0 = clock2()
1657 for nr in runs:
1657 for nr in runs:
1658 runner(filename,prog_ns,prog_ns,
1658 runner(filename,prog_ns,prog_ns,
1659 exit_ignore=exit_ignore)
1659 exit_ignore=exit_ignore)
1660 t1 = clock2()
1660 t1 = clock2()
1661 t_usr = t1[0]-t0[0]
1661 t_usr = t1[0]-t0[0]
1662 t_sys = t1[1]-t1[1]
1662 t_sys = t1[1]-t1[1]
1663 print "\nIPython CPU timings (estimated):"
1663 print "\nIPython CPU timings (estimated):"
1664 print "Total runs performed:",nruns
1664 print "Total runs performed:",nruns
1665 print " Times : %10s %10s" % ('Total','Per run')
1665 print " Times : %10s %10s" % ('Total','Per run')
1666 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1666 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1667 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1667 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1668
1668
1669 else:
1669 else:
1670 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1670 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1671 if opts.has_key('i'):
1671 if opts.has_key('i'):
1672 self.shell.user_ns['__name__'] = __name__save
1672 self.shell.user_ns['__name__'] = __name__save
1673 else:
1673 else:
1674 # update IPython interactive namespace
1674 # update IPython interactive namespace
1675 del prog_ns['__name__']
1675 del prog_ns['__name__']
1676 self.shell.user_ns.update(prog_ns)
1676 self.shell.user_ns.update(prog_ns)
1677 finally:
1677 finally:
1678 sys.argv = save_argv
1678 sys.argv = save_argv
1679 if restore_main:
1679 if restore_main:
1680 sys.modules['__main__'] = restore_main
1680 sys.modules['__main__'] = restore_main
1681 self.shell.reloadhist()
1681 self.shell.reloadhist()
1682
1682
1683 return stats
1683 return stats
1684
1684
1685 def magic_runlog(self, parameter_s =''):
1685 def magic_runlog(self, parameter_s =''):
1686 """Run files as logs.
1686 """Run files as logs.
1687
1687
1688 Usage:\\
1688 Usage:\\
1689 %runlog file1 file2 ...
1689 %runlog file1 file2 ...
1690
1690
1691 Run the named files (treating them as log files) in sequence inside
1691 Run the named files (treating them as log files) in sequence inside
1692 the interpreter, and return to the prompt. This is much slower than
1692 the interpreter, and return to the prompt. This is much slower than
1693 %run because each line is executed in a try/except block, but it
1693 %run because each line is executed in a try/except block, but it
1694 allows running files with syntax errors in them.
1694 allows running files with syntax errors in them.
1695
1695
1696 Normally IPython will guess when a file is one of its own logfiles, so
1696 Normally IPython will guess when a file is one of its own logfiles, so
1697 you can typically use %run even for logs. This shorthand allows you to
1697 you can typically use %run even for logs. This shorthand allows you to
1698 force any file to be treated as a log file."""
1698 force any file to be treated as a log file."""
1699
1699
1700 for f in parameter_s.split():
1700 for f in parameter_s.split():
1701 self.shell.safe_execfile(f,self.shell.user_ns,
1701 self.shell.safe_execfile(f,self.shell.user_ns,
1702 self.shell.user_ns,islog=1)
1702 self.shell.user_ns,islog=1)
1703
1703
1704 def magic_timeit(self, parameter_s =''):
1704 def magic_timeit(self, parameter_s =''):
1705 """Time execution of a Python statement or expression
1705 """Time execution of a Python statement or expression
1706
1706
1707 Usage:\\
1707 Usage:\\
1708 %timeit [-n<N> -r<R> [-t|-c]] statement
1708 %timeit [-n<N> -r<R> [-t|-c]] statement
1709
1709
1710 Time execution of a Python statement or expression using the timeit
1710 Time execution of a Python statement or expression using the timeit
1711 module.
1711 module.
1712
1712
1713 Options:
1713 Options:
1714 -n<N>: execute the given statement <N> times in a loop. If this value
1714 -n<N>: execute the given statement <N> times in a loop. If this value
1715 is not given, a fitting value is chosen.
1715 is not given, a fitting value is chosen.
1716
1716
1717 -r<R>: repeat the loop iteration <R> times and take the best result.
1717 -r<R>: repeat the loop iteration <R> times and take the best result.
1718 Default: 3
1718 Default: 3
1719
1719
1720 -t: use time.time to measure the time, which is the default on Unix.
1720 -t: use time.time to measure the time, which is the default on Unix.
1721 This function measures wall time.
1721 This function measures wall time.
1722
1722
1723 -c: use time.clock to measure the time, which is the default on
1723 -c: use time.clock to measure the time, which is the default on
1724 Windows and measures wall time. On Unix, resource.getrusage is used
1724 Windows and measures wall time. On Unix, resource.getrusage is used
1725 instead and returns the CPU user time.
1725 instead and returns the CPU user time.
1726
1726
1727 -p<P>: use a precision of <P> digits to display the timing result.
1727 -p<P>: use a precision of <P> digits to display the timing result.
1728 Default: 3
1728 Default: 3
1729
1729
1730
1730
1731 Examples:\\
1731 Examples:\\
1732 In [1]: %timeit pass
1732 In [1]: %timeit pass
1733 10000000 loops, best of 3: 53.3 ns per loop
1733 10000000 loops, best of 3: 53.3 ns per loop
1734
1734
1735 In [2]: u = None
1735 In [2]: u = None
1736
1736
1737 In [3]: %timeit u is None
1737 In [3]: %timeit u is None
1738 10000000 loops, best of 3: 184 ns per loop
1738 10000000 loops, best of 3: 184 ns per loop
1739
1739
1740 In [4]: %timeit -r 4 u == None
1740 In [4]: %timeit -r 4 u == None
1741 1000000 loops, best of 4: 242 ns per loop
1741 1000000 loops, best of 4: 242 ns per loop
1742
1742
1743 In [5]: import time
1743 In [5]: import time
1744
1744
1745 In [6]: %timeit -n1 time.sleep(2)
1745 In [6]: %timeit -n1 time.sleep(2)
1746 1 loops, best of 3: 2 s per loop
1746 1 loops, best of 3: 2 s per loop
1747
1747
1748
1748
1749 The times reported by %timeit will be slightly higher than those
1749 The times reported by %timeit will be slightly higher than those
1750 reported by the timeit.py script when variables are accessed. This is
1750 reported by the timeit.py script when variables are accessed. This is
1751 due to the fact that %timeit executes the statement in the namespace
1751 due to the fact that %timeit executes the statement in the namespace
1752 of the shell, compared with timeit.py, which uses a single setup
1752 of the shell, compared with timeit.py, which uses a single setup
1753 statement to import function or create variables. Generally, the bias
1753 statement to import function or create variables. Generally, the bias
1754 does not matter as long as results from timeit.py are not mixed with
1754 does not matter as long as results from timeit.py are not mixed with
1755 those from %timeit."""
1755 those from %timeit."""
1756
1756
1757 import timeit
1757 import timeit
1758 import math
1758 import math
1759
1759
1760 units = ["s", "ms", "\xc2\xb5s", "ns"]
1760 units = ["s", "ms", "\xc2\xb5s", "ns"]
1761 scaling = [1, 1e3, 1e6, 1e9]
1761 scaling = [1, 1e3, 1e6, 1e9]
1762
1762
1763 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1763 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1764 posix=False)
1764 posix=False)
1765 if stmt == "":
1765 if stmt == "":
1766 return
1766 return
1767 timefunc = timeit.default_timer
1767 timefunc = timeit.default_timer
1768 number = int(getattr(opts, "n", 0))
1768 number = int(getattr(opts, "n", 0))
1769 repeat = int(getattr(opts, "r", timeit.default_repeat))
1769 repeat = int(getattr(opts, "r", timeit.default_repeat))
1770 precision = int(getattr(opts, "p", 3))
1770 precision = int(getattr(opts, "p", 3))
1771 if hasattr(opts, "t"):
1771 if hasattr(opts, "t"):
1772 timefunc = time.time
1772 timefunc = time.time
1773 if hasattr(opts, "c"):
1773 if hasattr(opts, "c"):
1774 timefunc = clock
1774 timefunc = clock
1775
1775
1776 timer = timeit.Timer(timer=timefunc)
1776 timer = timeit.Timer(timer=timefunc)
1777 # this code has tight coupling to the inner workings of timeit.Timer,
1777 # this code has tight coupling to the inner workings of timeit.Timer,
1778 # but is there a better way to achieve that the code stmt has access
1778 # but is there a better way to achieve that the code stmt has access
1779 # to the shell namespace?
1779 # to the shell namespace?
1780
1780
1781 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1781 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1782 'setup': "pass"}
1782 'setup': "pass"}
1783 code = compile(src, "<magic-timeit>", "exec")
1783 code = compile(src, "<magic-timeit>", "exec")
1784 ns = {}
1784 ns = {}
1785 exec code in self.shell.user_ns, ns
1785 exec code in self.shell.user_ns, ns
1786 timer.inner = ns["inner"]
1786 timer.inner = ns["inner"]
1787
1787
1788 if number == 0:
1788 if number == 0:
1789 # determine number so that 0.2 <= total time < 2.0
1789 # determine number so that 0.2 <= total time < 2.0
1790 number = 1
1790 number = 1
1791 for i in range(1, 10):
1791 for i in range(1, 10):
1792 number *= 10
1792 number *= 10
1793 if timer.timeit(number) >= 0.2:
1793 if timer.timeit(number) >= 0.2:
1794 break
1794 break
1795
1795
1796 best = min(timer.repeat(repeat, number)) / number
1796 best = min(timer.repeat(repeat, number)) / number
1797
1797
1798 if best > 0.0:
1798 if best > 0.0:
1799 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1799 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1800 else:
1800 else:
1801 order = 3
1801 order = 3
1802 print "%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1802 print "%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1803 precision,
1803 precision,
1804 best * scaling[order],
1804 best * scaling[order],
1805 units[order])
1805 units[order])
1806
1806
1807 def magic_time(self,parameter_s = ''):
1807 def magic_time(self,parameter_s = ''):
1808 """Time execution of a Python statement or expression.
1808 """Time execution of a Python statement or expression.
1809
1809
1810 The CPU and wall clock times are printed, and the value of the
1810 The CPU and wall clock times are printed, and the value of the
1811 expression (if any) is returned. Note that under Win32, system time
1811 expression (if any) is returned. Note that under Win32, system time
1812 is always reported as 0, since it can not be measured.
1812 is always reported as 0, since it can not be measured.
1813
1813
1814 This function provides very basic timing functionality. In Python
1814 This function provides very basic timing functionality. In Python
1815 2.3, the timeit module offers more control and sophistication, so this
1815 2.3, the timeit module offers more control and sophistication, so this
1816 could be rewritten to use it (patches welcome).
1816 could be rewritten to use it (patches welcome).
1817
1817
1818 Some examples:
1818 Some examples:
1819
1819
1820 In [1]: time 2**128
1820 In [1]: time 2**128
1821 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1821 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1822 Wall time: 0.00
1822 Wall time: 0.00
1823 Out[1]: 340282366920938463463374607431768211456L
1823 Out[1]: 340282366920938463463374607431768211456L
1824
1824
1825 In [2]: n = 1000000
1825 In [2]: n = 1000000
1826
1826
1827 In [3]: time sum(range(n))
1827 In [3]: time sum(range(n))
1828 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1828 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1829 Wall time: 1.37
1829 Wall time: 1.37
1830 Out[3]: 499999500000L
1830 Out[3]: 499999500000L
1831
1831
1832 In [4]: time print 'hello world'
1832 In [4]: time print 'hello world'
1833 hello world
1833 hello world
1834 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1834 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1835 Wall time: 0.00
1835 Wall time: 0.00
1836 """
1836 """
1837
1837
1838 # fail immediately if the given expression can't be compiled
1838 # fail immediately if the given expression can't be compiled
1839 try:
1839 try:
1840 mode = 'eval'
1840 mode = 'eval'
1841 code = compile(parameter_s,'<timed eval>',mode)
1841 code = compile(parameter_s,'<timed eval>',mode)
1842 except SyntaxError:
1842 except SyntaxError:
1843 mode = 'exec'
1843 mode = 'exec'
1844 code = compile(parameter_s,'<timed exec>',mode)
1844 code = compile(parameter_s,'<timed exec>',mode)
1845 # skew measurement as little as possible
1845 # skew measurement as little as possible
1846 glob = self.shell.user_ns
1846 glob = self.shell.user_ns
1847 clk = clock2
1847 clk = clock2
1848 wtime = time.time
1848 wtime = time.time
1849 # time execution
1849 # time execution
1850 wall_st = wtime()
1850 wall_st = wtime()
1851 if mode=='eval':
1851 if mode=='eval':
1852 st = clk()
1852 st = clk()
1853 out = eval(code,glob)
1853 out = eval(code,glob)
1854 end = clk()
1854 end = clk()
1855 else:
1855 else:
1856 st = clk()
1856 st = clk()
1857 exec code in glob
1857 exec code in glob
1858 end = clk()
1858 end = clk()
1859 out = None
1859 out = None
1860 wall_end = wtime()
1860 wall_end = wtime()
1861 # Compute actual times and report
1861 # Compute actual times and report
1862 wall_time = wall_end-wall_st
1862 wall_time = wall_end-wall_st
1863 cpu_user = end[0]-st[0]
1863 cpu_user = end[0]-st[0]
1864 cpu_sys = end[1]-st[1]
1864 cpu_sys = end[1]-st[1]
1865 cpu_tot = cpu_user+cpu_sys
1865 cpu_tot = cpu_user+cpu_sys
1866 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1866 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1867 (cpu_user,cpu_sys,cpu_tot)
1867 (cpu_user,cpu_sys,cpu_tot)
1868 print "Wall time: %.2f" % wall_time
1868 print "Wall time: %.2f" % wall_time
1869 return out
1869 return out
1870
1870
1871 def magic_macro(self,parameter_s = ''):
1871 def magic_macro(self,parameter_s = ''):
1872 """Define a set of input lines as a macro for future re-execution.
1872 """Define a set of input lines as a macro for future re-execution.
1873
1873
1874 Usage:\\
1874 Usage:\\
1875 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1875 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1876
1876
1877 Options:
1877 Options:
1878
1878
1879 -r: use 'raw' input. By default, the 'processed' history is used,
1879 -r: use 'raw' input. By default, the 'processed' history is used,
1880 so that magics are loaded in their transformed version to valid
1880 so that magics are loaded in their transformed version to valid
1881 Python. If this option is given, the raw input as typed as the
1881 Python. If this option is given, the raw input as typed as the
1882 command line is used instead.
1882 command line is used instead.
1883
1883
1884 This will define a global variable called `name` which is a string
1884 This will define a global variable called `name` which is a string
1885 made of joining the slices and lines you specify (n1,n2,... numbers
1885 made of joining the slices and lines you specify (n1,n2,... numbers
1886 above) from your input history into a single string. This variable
1886 above) from your input history into a single string. This variable
1887 acts like an automatic function which re-executes those lines as if
1887 acts like an automatic function which re-executes those lines as if
1888 you had typed them. You just type 'name' at the prompt and the code
1888 you had typed them. You just type 'name' at the prompt and the code
1889 executes.
1889 executes.
1890
1890
1891 The notation for indicating number ranges is: n1-n2 means 'use line
1891 The notation for indicating number ranges is: n1-n2 means 'use line
1892 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1892 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1893 using the lines numbered 5,6 and 7.
1893 using the lines numbered 5,6 and 7.
1894
1894
1895 Note: as a 'hidden' feature, you can also use traditional python slice
1895 Note: as a 'hidden' feature, you can also use traditional python slice
1896 notation, where N:M means numbers N through M-1.
1896 notation, where N:M means numbers N through M-1.
1897
1897
1898 For example, if your history contains (%hist prints it):
1898 For example, if your history contains (%hist prints it):
1899
1899
1900 44: x=1\\
1900 44: x=1\\
1901 45: y=3\\
1901 45: y=3\\
1902 46: z=x+y\\
1902 46: z=x+y\\
1903 47: print x\\
1903 47: print x\\
1904 48: a=5\\
1904 48: a=5\\
1905 49: print 'x',x,'y',y\\
1905 49: print 'x',x,'y',y\\
1906
1906
1907 you can create a macro with lines 44 through 47 (included) and line 49
1907 you can create a macro with lines 44 through 47 (included) and line 49
1908 called my_macro with:
1908 called my_macro with:
1909
1909
1910 In [51]: %macro my_macro 44-47 49
1910 In [51]: %macro my_macro 44-47 49
1911
1911
1912 Now, typing `my_macro` (without quotes) will re-execute all this code
1912 Now, typing `my_macro` (without quotes) will re-execute all this code
1913 in one pass.
1913 in one pass.
1914
1914
1915 You don't need to give the line-numbers in order, and any given line
1915 You don't need to give the line-numbers in order, and any given line
1916 number can appear multiple times. You can assemble macros with any
1916 number can appear multiple times. You can assemble macros with any
1917 lines from your input history in any order.
1917 lines from your input history in any order.
1918
1918
1919 The macro is a simple object which holds its value in an attribute,
1919 The macro is a simple object which holds its value in an attribute,
1920 but IPython's display system checks for macros and executes them as
1920 but IPython's display system checks for macros and executes them as
1921 code instead of printing them when you type their name.
1921 code instead of printing them when you type their name.
1922
1922
1923 You can view a macro's contents by explicitly printing it with:
1923 You can view a macro's contents by explicitly printing it with:
1924
1924
1925 'print macro_name'.
1925 'print macro_name'.
1926
1926
1927 For one-off cases which DON'T contain magic function calls in them you
1927 For one-off cases which DON'T contain magic function calls in them you
1928 can obtain similar results by explicitly executing slices from your
1928 can obtain similar results by explicitly executing slices from your
1929 input history with:
1929 input history with:
1930
1930
1931 In [60]: exec In[44:48]+In[49]"""
1931 In [60]: exec In[44:48]+In[49]"""
1932
1932
1933 opts,args = self.parse_options(parameter_s,'r',mode='list')
1933 opts,args = self.parse_options(parameter_s,'r',mode='list')
1934 name,ranges = args[0], args[1:]
1934 name,ranges = args[0], args[1:]
1935 #print 'rng',ranges # dbg
1935 #print 'rng',ranges # dbg
1936 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1936 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1937 macro = Macro(lines)
1937 macro = Macro(lines)
1938 self.shell.user_ns.update({name:macro})
1938 self.shell.user_ns.update({name:macro})
1939 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1939 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1940 print 'Macro contents:'
1940 print 'Macro contents:'
1941 print macro,
1941 print macro,
1942
1942
1943 def magic_save(self,parameter_s = ''):
1943 def magic_save(self,parameter_s = ''):
1944 """Save a set of lines to a given filename.
1944 """Save a set of lines to a given filename.
1945
1945
1946 Usage:\\
1946 Usage:\\
1947 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1947 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1948
1948
1949 Options:
1949 Options:
1950
1950
1951 -r: use 'raw' input. By default, the 'processed' history is used,
1951 -r: use 'raw' input. By default, the 'processed' history is used,
1952 so that magics are loaded in their transformed version to valid
1952 so that magics are loaded in their transformed version to valid
1953 Python. If this option is given, the raw input as typed as the
1953 Python. If this option is given, the raw input as typed as the
1954 command line is used instead.
1954 command line is used instead.
1955
1955
1956 This function uses the same syntax as %macro for line extraction, but
1956 This function uses the same syntax as %macro for line extraction, but
1957 instead of creating a macro it saves the resulting string to the
1957 instead of creating a macro it saves the resulting string to the
1958 filename you specify.
1958 filename you specify.
1959
1959
1960 It adds a '.py' extension to the file if you don't do so yourself, and
1960 It adds a '.py' extension to the file if you don't do so yourself, and
1961 it asks for confirmation before overwriting existing files."""
1961 it asks for confirmation before overwriting existing files."""
1962
1962
1963 opts,args = self.parse_options(parameter_s,'r',mode='list')
1963 opts,args = self.parse_options(parameter_s,'r',mode='list')
1964 fname,ranges = args[0], args[1:]
1964 fname,ranges = args[0], args[1:]
1965 if not fname.endswith('.py'):
1965 if not fname.endswith('.py'):
1966 fname += '.py'
1966 fname += '.py'
1967 if os.path.isfile(fname):
1967 if os.path.isfile(fname):
1968 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1968 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1969 if ans.lower() not in ['y','yes']:
1969 if ans.lower() not in ['y','yes']:
1970 print 'Operation cancelled.'
1970 print 'Operation cancelled.'
1971 return
1971 return
1972 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1972 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1973 f = file(fname,'w')
1973 f = file(fname,'w')
1974 f.write(cmds)
1974 f.write(cmds)
1975 f.close()
1975 f.close()
1976 print 'The following commands were written to file `%s`:' % fname
1976 print 'The following commands were written to file `%s`:' % fname
1977 print cmds
1977 print cmds
1978
1978
1979 def _edit_macro(self,mname,macro):
1979 def _edit_macro(self,mname,macro):
1980 """open an editor with the macro data in a file"""
1980 """open an editor with the macro data in a file"""
1981 filename = self.shell.mktempfile(macro.value)
1981 filename = self.shell.mktempfile(macro.value)
1982 self.shell.hooks.editor(filename)
1982 self.shell.hooks.editor(filename)
1983
1983
1984 # and make a new macro object, to replace the old one
1984 # and make a new macro object, to replace the old one
1985 mfile = open(filename)
1985 mfile = open(filename)
1986 mvalue = mfile.read()
1986 mvalue = mfile.read()
1987 mfile.close()
1987 mfile.close()
1988 self.shell.user_ns[mname] = Macro(mvalue)
1988 self.shell.user_ns[mname] = Macro(mvalue)
1989
1989
1990 def magic_ed(self,parameter_s=''):
1990 def magic_ed(self,parameter_s=''):
1991 """Alias to %edit."""
1991 """Alias to %edit."""
1992 return self.magic_edit(parameter_s)
1992 return self.magic_edit(parameter_s)
1993
1993
1994 def magic_edit(self,parameter_s='',last_call=['','']):
1994 def magic_edit(self,parameter_s='',last_call=['','']):
1995 """Bring up an editor and execute the resulting code.
1995 """Bring up an editor and execute the resulting code.
1996
1996
1997 Usage:
1997 Usage:
1998 %edit [options] [args]
1998 %edit [options] [args]
1999
1999
2000 %edit runs IPython's editor hook. The default version of this hook is
2000 %edit runs IPython's editor hook. The default version of this hook is
2001 set to call the __IPYTHON__.rc.editor command. This is read from your
2001 set to call the __IPYTHON__.rc.editor command. This is read from your
2002 environment variable $EDITOR. If this isn't found, it will default to
2002 environment variable $EDITOR. If this isn't found, it will default to
2003 vi under Linux/Unix and to notepad under Windows. See the end of this
2003 vi under Linux/Unix and to notepad under Windows. See the end of this
2004 docstring for how to change the editor hook.
2004 docstring for how to change the editor hook.
2005
2005
2006 You can also set the value of this editor via the command line option
2006 You can also set the value of this editor via the command line option
2007 '-editor' or in your ipythonrc file. This is useful if you wish to use
2007 '-editor' or in your ipythonrc file. This is useful if you wish to use
2008 specifically for IPython an editor different from your typical default
2008 specifically for IPython an editor different from your typical default
2009 (and for Windows users who typically don't set environment variables).
2009 (and for Windows users who typically don't set environment variables).
2010
2010
2011 This command allows you to conveniently edit multi-line code right in
2011 This command allows you to conveniently edit multi-line code right in
2012 your IPython session.
2012 your IPython session.
2013
2013
2014 If called without arguments, %edit opens up an empty editor with a
2014 If called without arguments, %edit opens up an empty editor with a
2015 temporary file and will execute the contents of this file when you
2015 temporary file and will execute the contents of this file when you
2016 close it (don't forget to save it!).
2016 close it (don't forget to save it!).
2017
2017
2018
2018
2019 Options:
2019 Options:
2020
2020
2021 -n <number>: open the editor at a specified line number. By default,
2021 -n <number>: open the editor at a specified line number. By default,
2022 the IPython editor hook uses the unix syntax 'editor +N filename', but
2022 the IPython editor hook uses the unix syntax 'editor +N filename', but
2023 you can configure this by providing your own modified hook if your
2023 you can configure this by providing your own modified hook if your
2024 favorite editor supports line-number specifications with a different
2024 favorite editor supports line-number specifications with a different
2025 syntax.
2025 syntax.
2026
2026
2027 -p: this will call the editor with the same data as the previous time
2027 -p: this will call the editor with the same data as the previous time
2028 it was used, regardless of how long ago (in your current session) it
2028 it was used, regardless of how long ago (in your current session) it
2029 was.
2029 was.
2030
2030
2031 -r: use 'raw' input. This option only applies to input taken from the
2031 -r: use 'raw' input. This option only applies to input taken from the
2032 user's history. By default, the 'processed' history is used, so that
2032 user's history. By default, the 'processed' history is used, so that
2033 magics are loaded in their transformed version to valid Python. If
2033 magics are loaded in their transformed version to valid Python. If
2034 this option is given, the raw input as typed as the command line is
2034 this option is given, the raw input as typed as the command line is
2035 used instead. When you exit the editor, it will be executed by
2035 used instead. When you exit the editor, it will be executed by
2036 IPython's own processor.
2036 IPython's own processor.
2037
2037
2038 -x: do not execute the edited code immediately upon exit. This is
2038 -x: do not execute the edited code immediately upon exit. This is
2039 mainly useful if you are editing programs which need to be called with
2039 mainly useful if you are editing programs which need to be called with
2040 command line arguments, which you can then do using %run.
2040 command line arguments, which you can then do using %run.
2041
2041
2042
2042
2043 Arguments:
2043 Arguments:
2044
2044
2045 If arguments are given, the following possibilites exist:
2045 If arguments are given, the following possibilites exist:
2046
2046
2047 - The arguments are numbers or pairs of colon-separated numbers (like
2047 - The arguments are numbers or pairs of colon-separated numbers (like
2048 1 4:8 9). These are interpreted as lines of previous input to be
2048 1 4:8 9). These are interpreted as lines of previous input to be
2049 loaded into the editor. The syntax is the same of the %macro command.
2049 loaded into the editor. The syntax is the same of the %macro command.
2050
2050
2051 - If the argument doesn't start with a number, it is evaluated as a
2051 - If the argument doesn't start with a number, it is evaluated as a
2052 variable and its contents loaded into the editor. You can thus edit
2052 variable and its contents loaded into the editor. You can thus edit
2053 any string which contains python code (including the result of
2053 any string which contains python code (including the result of
2054 previous edits).
2054 previous edits).
2055
2055
2056 - If the argument is the name of an object (other than a string),
2056 - If the argument is the name of an object (other than a string),
2057 IPython will try to locate the file where it was defined and open the
2057 IPython will try to locate the file where it was defined and open the
2058 editor at the point where it is defined. You can use `%edit function`
2058 editor at the point where it is defined. You can use `%edit function`
2059 to load an editor exactly at the point where 'function' is defined,
2059 to load an editor exactly at the point where 'function' is defined,
2060 edit it and have the file be executed automatically.
2060 edit it and have the file be executed automatically.
2061
2061
2062 If the object is a macro (see %macro for details), this opens up your
2062 If the object is a macro (see %macro for details), this opens up your
2063 specified editor with a temporary file containing the macro's data.
2063 specified editor with a temporary file containing the macro's data.
2064 Upon exit, the macro is reloaded with the contents of the file.
2064 Upon exit, the macro is reloaded with the contents of the file.
2065
2065
2066 Note: opening at an exact line is only supported under Unix, and some
2066 Note: opening at an exact line is only supported under Unix, and some
2067 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2067 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2068 '+NUMBER' parameter necessary for this feature. Good editors like
2068 '+NUMBER' parameter necessary for this feature. Good editors like
2069 (X)Emacs, vi, jed, pico and joe all do.
2069 (X)Emacs, vi, jed, pico and joe all do.
2070
2070
2071 - If the argument is not found as a variable, IPython will look for a
2071 - If the argument is not found as a variable, IPython will look for a
2072 file with that name (adding .py if necessary) and load it into the
2072 file with that name (adding .py if necessary) and load it into the
2073 editor. It will execute its contents with execfile() when you exit,
2073 editor. It will execute its contents with execfile() when you exit,
2074 loading any code in the file into your interactive namespace.
2074 loading any code in the file into your interactive namespace.
2075
2075
2076 After executing your code, %edit will return as output the code you
2076 After executing your code, %edit will return as output the code you
2077 typed in the editor (except when it was an existing file). This way
2077 typed in the editor (except when it was an existing file). This way
2078 you can reload the code in further invocations of %edit as a variable,
2078 you can reload the code in further invocations of %edit as a variable,
2079 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2079 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2080 the output.
2080 the output.
2081
2081
2082 Note that %edit is also available through the alias %ed.
2082 Note that %edit is also available through the alias %ed.
2083
2083
2084 This is an example of creating a simple function inside the editor and
2084 This is an example of creating a simple function inside the editor and
2085 then modifying it. First, start up the editor:
2085 then modifying it. First, start up the editor:
2086
2086
2087 In [1]: ed\\
2087 In [1]: ed\\
2088 Editing... done. Executing edited code...\\
2088 Editing... done. Executing edited code...\\
2089 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
2089 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
2090
2090
2091 We can then call the function foo():
2091 We can then call the function foo():
2092
2092
2093 In [2]: foo()\\
2093 In [2]: foo()\\
2094 foo() was defined in an editing session
2094 foo() was defined in an editing session
2095
2095
2096 Now we edit foo. IPython automatically loads the editor with the
2096 Now we edit foo. IPython automatically loads the editor with the
2097 (temporary) file where foo() was previously defined:
2097 (temporary) file where foo() was previously defined:
2098
2098
2099 In [3]: ed foo\\
2099 In [3]: ed foo\\
2100 Editing... done. Executing edited code...
2100 Editing... done. Executing edited code...
2101
2101
2102 And if we call foo() again we get the modified version:
2102 And if we call foo() again we get the modified version:
2103
2103
2104 In [4]: foo()\\
2104 In [4]: foo()\\
2105 foo() has now been changed!
2105 foo() has now been changed!
2106
2106
2107 Here is an example of how to edit a code snippet successive
2107 Here is an example of how to edit a code snippet successive
2108 times. First we call the editor:
2108 times. First we call the editor:
2109
2109
2110 In [8]: ed\\
2110 In [8]: ed\\
2111 Editing... done. Executing edited code...\\
2111 Editing... done. Executing edited code...\\
2112 hello\\
2112 hello\\
2113 Out[8]: "print 'hello'\\n"
2113 Out[8]: "print 'hello'\\n"
2114
2114
2115 Now we call it again with the previous output (stored in _):
2115 Now we call it again with the previous output (stored in _):
2116
2116
2117 In [9]: ed _\\
2117 In [9]: ed _\\
2118 Editing... done. Executing edited code...\\
2118 Editing... done. Executing edited code...\\
2119 hello world\\
2119 hello world\\
2120 Out[9]: "print 'hello world'\\n"
2120 Out[9]: "print 'hello world'\\n"
2121
2121
2122 Now we call it with the output #8 (stored in _8, also as Out[8]):
2122 Now we call it with the output #8 (stored in _8, also as Out[8]):
2123
2123
2124 In [10]: ed _8\\
2124 In [10]: ed _8\\
2125 Editing... done. Executing edited code...\\
2125 Editing... done. Executing edited code...\\
2126 hello again\\
2126 hello again\\
2127 Out[10]: "print 'hello again'\\n"
2127 Out[10]: "print 'hello again'\\n"
2128
2128
2129
2129
2130 Changing the default editor hook:
2130 Changing the default editor hook:
2131
2131
2132 If you wish to write your own editor hook, you can put it in a
2132 If you wish to write your own editor hook, you can put it in a
2133 configuration file which you load at startup time. The default hook
2133 configuration file which you load at startup time. The default hook
2134 is defined in the IPython.hooks module, and you can use that as a
2134 is defined in the IPython.hooks module, and you can use that as a
2135 starting example for further modifications. That file also has
2135 starting example for further modifications. That file also has
2136 general instructions on how to set a new hook for use once you've
2136 general instructions on how to set a new hook for use once you've
2137 defined it."""
2137 defined it."""
2138
2138
2139 # FIXME: This function has become a convoluted mess. It needs a
2139 # FIXME: This function has become a convoluted mess. It needs a
2140 # ground-up rewrite with clean, simple logic.
2140 # ground-up rewrite with clean, simple logic.
2141
2141
2142 def make_filename(arg):
2142 def make_filename(arg):
2143 "Make a filename from the given args"
2143 "Make a filename from the given args"
2144 try:
2144 try:
2145 filename = get_py_filename(arg)
2145 filename = get_py_filename(arg)
2146 except IOError:
2146 except IOError:
2147 if args.endswith('.py'):
2147 if args.endswith('.py'):
2148 filename = arg
2148 filename = arg
2149 else:
2149 else:
2150 filename = None
2150 filename = None
2151 return filename
2151 return filename
2152
2152
2153 # custom exceptions
2153 # custom exceptions
2154 class DataIsObject(Exception): pass
2154 class DataIsObject(Exception): pass
2155
2155
2156 opts,args = self.parse_options(parameter_s,'prxn:')
2156 opts,args = self.parse_options(parameter_s,'prxn:')
2157 # Set a few locals from the options for convenience:
2157 # Set a few locals from the options for convenience:
2158 opts_p = opts.has_key('p')
2158 opts_p = opts.has_key('p')
2159 opts_r = opts.has_key('r')
2159 opts_r = opts.has_key('r')
2160
2160
2161 # Default line number value
2161 # Default line number value
2162 lineno = opts.get('n',None)
2162 lineno = opts.get('n',None)
2163
2163
2164 if opts_p:
2164 if opts_p:
2165 args = '_%s' % last_call[0]
2165 args = '_%s' % last_call[0]
2166 if not self.shell.user_ns.has_key(args):
2166 if not self.shell.user_ns.has_key(args):
2167 args = last_call[1]
2167 args = last_call[1]
2168
2168
2169 # use last_call to remember the state of the previous call, but don't
2169 # use last_call to remember the state of the previous call, but don't
2170 # let it be clobbered by successive '-p' calls.
2170 # let it be clobbered by successive '-p' calls.
2171 try:
2171 try:
2172 last_call[0] = self.shell.outputcache.prompt_count
2172 last_call[0] = self.shell.outputcache.prompt_count
2173 if not opts_p:
2173 if not opts_p:
2174 last_call[1] = parameter_s
2174 last_call[1] = parameter_s
2175 except:
2175 except:
2176 pass
2176 pass
2177
2177
2178 # by default this is done with temp files, except when the given
2178 # by default this is done with temp files, except when the given
2179 # arg is a filename
2179 # arg is a filename
2180 use_temp = 1
2180 use_temp = 1
2181
2181
2182 if re.match(r'\d',args):
2182 if re.match(r'\d',args):
2183 # Mode where user specifies ranges of lines, like in %macro.
2183 # Mode where user specifies ranges of lines, like in %macro.
2184 # This means that you can't edit files whose names begin with
2184 # This means that you can't edit files whose names begin with
2185 # numbers this way. Tough.
2185 # numbers this way. Tough.
2186 ranges = args.split()
2186 ranges = args.split()
2187 data = ''.join(self.extract_input_slices(ranges,opts_r))
2187 data = ''.join(self.extract_input_slices(ranges,opts_r))
2188 elif args.endswith('.py'):
2188 elif args.endswith('.py'):
2189 filename = make_filename(args)
2189 filename = make_filename(args)
2190 data = ''
2190 data = ''
2191 use_temp = 0
2191 use_temp = 0
2192 elif args:
2192 elif args:
2193 try:
2193 try:
2194 # Load the parameter given as a variable. If not a string,
2194 # Load the parameter given as a variable. If not a string,
2195 # process it as an object instead (below)
2195 # process it as an object instead (below)
2196
2196
2197 #print '*** args',args,'type',type(args) # dbg
2197 #print '*** args',args,'type',type(args) # dbg
2198 data = eval(args,self.shell.user_ns)
2198 data = eval(args,self.shell.user_ns)
2199 if not type(data) in StringTypes:
2199 if not type(data) in StringTypes:
2200 raise DataIsObject
2200 raise DataIsObject
2201
2201
2202 except (NameError,SyntaxError):
2202 except (NameError,SyntaxError):
2203 # given argument is not a variable, try as a filename
2203 # given argument is not a variable, try as a filename
2204 filename = make_filename(args)
2204 filename = make_filename(args)
2205 if filename is None:
2205 if filename is None:
2206 warn("Argument given (%s) can't be found as a variable "
2206 warn("Argument given (%s) can't be found as a variable "
2207 "or as a filename." % args)
2207 "or as a filename." % args)
2208 return
2208 return
2209
2209
2210 data = ''
2210 data = ''
2211 use_temp = 0
2211 use_temp = 0
2212 except DataIsObject:
2212 except DataIsObject:
2213
2213
2214 # macros have a special edit function
2214 # macros have a special edit function
2215 if isinstance(data,Macro):
2215 if isinstance(data,Macro):
2216 self._edit_macro(args,data)
2216 self._edit_macro(args,data)
2217 return
2217 return
2218
2218
2219 # For objects, try to edit the file where they are defined
2219 # For objects, try to edit the file where they are defined
2220 try:
2220 try:
2221 filename = inspect.getabsfile(data)
2221 filename = inspect.getabsfile(data)
2222 datafile = 1
2222 datafile = 1
2223 except TypeError:
2223 except TypeError:
2224 filename = make_filename(args)
2224 filename = make_filename(args)
2225 datafile = 1
2225 datafile = 1
2226 warn('Could not find file where `%s` is defined.\n'
2226 warn('Could not find file where `%s` is defined.\n'
2227 'Opening a file named `%s`' % (args,filename))
2227 'Opening a file named `%s`' % (args,filename))
2228 # Now, make sure we can actually read the source (if it was in
2228 # Now, make sure we can actually read the source (if it was in
2229 # a temp file it's gone by now).
2229 # a temp file it's gone by now).
2230 if datafile:
2230 if datafile:
2231 try:
2231 try:
2232 if lineno is None:
2232 if lineno is None:
2233 lineno = inspect.getsourcelines(data)[1]
2233 lineno = inspect.getsourcelines(data)[1]
2234 except IOError:
2234 except IOError:
2235 filename = make_filename(args)
2235 filename = make_filename(args)
2236 if filename is None:
2236 if filename is None:
2237 warn('The file `%s` where `%s` was defined cannot '
2237 warn('The file `%s` where `%s` was defined cannot '
2238 'be read.' % (filename,data))
2238 'be read.' % (filename,data))
2239 return
2239 return
2240 use_temp = 0
2240 use_temp = 0
2241 else:
2241 else:
2242 data = ''
2242 data = ''
2243
2243
2244 if use_temp:
2244 if use_temp:
2245 filename = self.shell.mktempfile(data)
2245 filename = self.shell.mktempfile(data)
2246 print 'IPython will make a temporary file named:',filename
2246 print 'IPython will make a temporary file named:',filename
2247
2247
2248 # do actual editing here
2248 # do actual editing here
2249 print 'Editing...',
2249 print 'Editing...',
2250 sys.stdout.flush()
2250 sys.stdout.flush()
2251 self.shell.hooks.editor(filename,lineno)
2251 self.shell.hooks.editor(filename,lineno)
2252 if opts.has_key('x'): # -x prevents actual execution
2252 if opts.has_key('x'): # -x prevents actual execution
2253 print
2253 print
2254 else:
2254 else:
2255 print 'done. Executing edited code...'
2255 print 'done. Executing edited code...'
2256 if opts_r:
2256 if opts_r:
2257 self.shell.runlines(file_read(filename))
2257 self.shell.runlines(file_read(filename))
2258 else:
2258 else:
2259 self.shell.safe_execfile(filename,self.shell.user_ns,
2259 self.shell.safe_execfile(filename,self.shell.user_ns,
2260 self.shell.user_ns)
2260 self.shell.user_ns)
2261 if use_temp:
2261 if use_temp:
2262 try:
2262 try:
2263 return open(filename).read()
2263 return open(filename).read()
2264 except IOError,msg:
2264 except IOError,msg:
2265 if msg.filename == filename:
2265 if msg.filename == filename:
2266 warn('File not found. Did you forget to save?')
2266 warn('File not found. Did you forget to save?')
2267 return
2267 return
2268 else:
2268 else:
2269 self.shell.showtraceback()
2269 self.shell.showtraceback()
2270
2270
2271 def magic_xmode(self,parameter_s = ''):
2271 def magic_xmode(self,parameter_s = ''):
2272 """Switch modes for the exception handlers.
2272 """Switch modes for the exception handlers.
2273
2273
2274 Valid modes: Plain, Context and Verbose.
2274 Valid modes: Plain, Context and Verbose.
2275
2275
2276 If called without arguments, acts as a toggle."""
2276 If called without arguments, acts as a toggle."""
2277
2277
2278 def xmode_switch_err(name):
2278 def xmode_switch_err(name):
2279 warn('Error changing %s exception modes.\n%s' %
2279 warn('Error changing %s exception modes.\n%s' %
2280 (name,sys.exc_info()[1]))
2280 (name,sys.exc_info()[1]))
2281
2281
2282 shell = self.shell
2282 shell = self.shell
2283 new_mode = parameter_s.strip().capitalize()
2283 new_mode = parameter_s.strip().capitalize()
2284 try:
2284 try:
2285 shell.InteractiveTB.set_mode(mode=new_mode)
2285 shell.InteractiveTB.set_mode(mode=new_mode)
2286 print 'Exception reporting mode:',shell.InteractiveTB.mode
2286 print 'Exception reporting mode:',shell.InteractiveTB.mode
2287 except:
2287 except:
2288 xmode_switch_err('user')
2288 xmode_switch_err('user')
2289
2289
2290 # threaded shells use a special handler in sys.excepthook
2290 # threaded shells use a special handler in sys.excepthook
2291 if shell.isthreaded:
2291 if shell.isthreaded:
2292 try:
2292 try:
2293 shell.sys_excepthook.set_mode(mode=new_mode)
2293 shell.sys_excepthook.set_mode(mode=new_mode)
2294 except:
2294 except:
2295 xmode_switch_err('threaded')
2295 xmode_switch_err('threaded')
2296
2296
2297 def magic_colors(self,parameter_s = ''):
2297 def magic_colors(self,parameter_s = ''):
2298 """Switch color scheme for prompts, info system and exception handlers.
2298 """Switch color scheme for prompts, info system and exception handlers.
2299
2299
2300 Currently implemented schemes: NoColor, Linux, LightBG.
2300 Currently implemented schemes: NoColor, Linux, LightBG.
2301
2301
2302 Color scheme names are not case-sensitive."""
2302 Color scheme names are not case-sensitive."""
2303
2303
2304 def color_switch_err(name):
2304 def color_switch_err(name):
2305 warn('Error changing %s color schemes.\n%s' %
2305 warn('Error changing %s color schemes.\n%s' %
2306 (name,sys.exc_info()[1]))
2306 (name,sys.exc_info()[1]))
2307
2307
2308
2308
2309 new_scheme = parameter_s.strip()
2309 new_scheme = parameter_s.strip()
2310 if not new_scheme:
2310 if not new_scheme:
2311 print 'You must specify a color scheme.'
2311 print 'You must specify a color scheme.'
2312 return
2312 return
2313 import IPython.rlineimpl as readline
2313 import IPython.rlineimpl as readline
2314 if not readline.have_readline:
2314 if not readline.have_readline:
2315 msg = """\
2315 msg = """\
2316 Proper color support under MS Windows requires the pyreadline library.
2316 Proper color support under MS Windows requires the pyreadline library.
2317 You can find it at:
2317 You can find it at:
2318 http://ipython.scipy.org/moin/PyReadline/Intro
2318 http://ipython.scipy.org/moin/PyReadline/Intro
2319 Gary's readline needs the ctypes module, from:
2319 Gary's readline needs the ctypes module, from:
2320 http://starship.python.net/crew/theller/ctypes
2320 http://starship.python.net/crew/theller/ctypes
2321 (Note that ctypes is already part of Python versions 2.5 and newer).
2321 (Note that ctypes is already part of Python versions 2.5 and newer).
2322
2322
2323 Defaulting color scheme to 'NoColor'"""
2323 Defaulting color scheme to 'NoColor'"""
2324 new_scheme = 'NoColor'
2324 new_scheme = 'NoColor'
2325 warn(msg)
2325 warn(msg)
2326 # local shortcut
2326 # local shortcut
2327 shell = self.shell
2327 shell = self.shell
2328
2328
2329 # Set prompt colors
2329 # Set prompt colors
2330 try:
2330 try:
2331 shell.outputcache.set_colors(new_scheme)
2331 shell.outputcache.set_colors(new_scheme)
2332 except:
2332 except:
2333 color_switch_err('prompt')
2333 color_switch_err('prompt')
2334 else:
2334 else:
2335 shell.rc.colors = \
2335 shell.rc.colors = \
2336 shell.outputcache.color_table.active_scheme_name
2336 shell.outputcache.color_table.active_scheme_name
2337 # Set exception colors
2337 # Set exception colors
2338 try:
2338 try:
2339 shell.InteractiveTB.set_colors(scheme = new_scheme)
2339 shell.InteractiveTB.set_colors(scheme = new_scheme)
2340 shell.SyntaxTB.set_colors(scheme = new_scheme)
2340 shell.SyntaxTB.set_colors(scheme = new_scheme)
2341 except:
2341 except:
2342 color_switch_err('exception')
2342 color_switch_err('exception')
2343
2343
2344 # threaded shells use a verbose traceback in sys.excepthook
2344 # threaded shells use a verbose traceback in sys.excepthook
2345 if shell.isthreaded:
2345 if shell.isthreaded:
2346 try:
2346 try:
2347 shell.sys_excepthook.set_colors(scheme=new_scheme)
2347 shell.sys_excepthook.set_colors(scheme=new_scheme)
2348 except:
2348 except:
2349 color_switch_err('system exception handler')
2349 color_switch_err('system exception handler')
2350
2350
2351 # Set info (for 'object?') colors
2351 # Set info (for 'object?') colors
2352 if shell.rc.color_info:
2352 if shell.rc.color_info:
2353 try:
2353 try:
2354 shell.inspector.set_active_scheme(new_scheme)
2354 shell.inspector.set_active_scheme(new_scheme)
2355 except:
2355 except:
2356 color_switch_err('object inspector')
2356 color_switch_err('object inspector')
2357 else:
2357 else:
2358 shell.inspector.set_active_scheme('NoColor')
2358 shell.inspector.set_active_scheme('NoColor')
2359
2359
2360 def magic_color_info(self,parameter_s = ''):
2360 def magic_color_info(self,parameter_s = ''):
2361 """Toggle color_info.
2361 """Toggle color_info.
2362
2362
2363 The color_info configuration parameter controls whether colors are
2363 The color_info configuration parameter controls whether colors are
2364 used for displaying object details (by things like %psource, %pfile or
2364 used for displaying object details (by things like %psource, %pfile or
2365 the '?' system). This function toggles this value with each call.
2365 the '?' system). This function toggles this value with each call.
2366
2366
2367 Note that unless you have a fairly recent pager (less works better
2367 Note that unless you have a fairly recent pager (less works better
2368 than more) in your system, using colored object information displays
2368 than more) in your system, using colored object information displays
2369 will not work properly. Test it and see."""
2369 will not work properly. Test it and see."""
2370
2370
2371 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2371 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2372 self.magic_colors(self.shell.rc.colors)
2372 self.magic_colors(self.shell.rc.colors)
2373 print 'Object introspection functions have now coloring:',
2373 print 'Object introspection functions have now coloring:',
2374 print ['OFF','ON'][self.shell.rc.color_info]
2374 print ['OFF','ON'][self.shell.rc.color_info]
2375
2375
2376 def magic_Pprint(self, parameter_s=''):
2376 def magic_Pprint(self, parameter_s=''):
2377 """Toggle pretty printing on/off."""
2377 """Toggle pretty printing on/off."""
2378
2378
2379 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2379 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2380 print 'Pretty printing has been turned', \
2380 print 'Pretty printing has been turned', \
2381 ['OFF','ON'][self.shell.rc.pprint]
2381 ['OFF','ON'][self.shell.rc.pprint]
2382
2382
2383 def magic_exit(self, parameter_s=''):
2383 def magic_exit(self, parameter_s=''):
2384 """Exit IPython, confirming if configured to do so.
2384 """Exit IPython, confirming if configured to do so.
2385
2385
2386 You can configure whether IPython asks for confirmation upon exit by
2386 You can configure whether IPython asks for confirmation upon exit by
2387 setting the confirm_exit flag in the ipythonrc file."""
2387 setting the confirm_exit flag in the ipythonrc file."""
2388
2388
2389 self.shell.exit()
2389 self.shell.exit()
2390
2390
2391 def magic_quit(self, parameter_s=''):
2391 def magic_quit(self, parameter_s=''):
2392 """Exit IPython, confirming if configured to do so (like %exit)"""
2392 """Exit IPython, confirming if configured to do so (like %exit)"""
2393
2393
2394 self.shell.exit()
2394 self.shell.exit()
2395
2395
2396 def magic_Exit(self, parameter_s=''):
2396 def magic_Exit(self, parameter_s=''):
2397 """Exit IPython without confirmation."""
2397 """Exit IPython without confirmation."""
2398
2398
2399 self.shell.exit_now = True
2399 self.shell.exit_now = True
2400
2400
2401 def magic_Quit(self, parameter_s=''):
2401 def magic_Quit(self, parameter_s=''):
2402 """Exit IPython without confirmation (like %Exit)."""
2402 """Exit IPython without confirmation (like %Exit)."""
2403
2403
2404 self.shell.exit_now = True
2404 self.shell.exit_now = True
2405
2405
2406 #......................................................................
2406 #......................................................................
2407 # Functions to implement unix shell-type things
2407 # Functions to implement unix shell-type things
2408
2408
2409 def magic_alias(self, parameter_s = ''):
2409 def magic_alias(self, parameter_s = ''):
2410 """Define an alias for a system command.
2410 """Define an alias for a system command.
2411
2411
2412 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2412 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2413
2413
2414 Then, typing 'alias_name params' will execute the system command 'cmd
2414 Then, typing 'alias_name params' will execute the system command 'cmd
2415 params' (from your underlying operating system).
2415 params' (from your underlying operating system).
2416
2416
2417 Aliases have lower precedence than magic functions and Python normal
2417 Aliases have lower precedence than magic functions and Python normal
2418 variables, so if 'foo' is both a Python variable and an alias, the
2418 variables, so if 'foo' is both a Python variable and an alias, the
2419 alias can not be executed until 'del foo' removes the Python variable.
2419 alias can not be executed until 'del foo' removes the Python variable.
2420
2420
2421 You can use the %l specifier in an alias definition to represent the
2421 You can use the %l specifier in an alias definition to represent the
2422 whole line when the alias is called. For example:
2422 whole line when the alias is called. For example:
2423
2423
2424 In [2]: alias all echo "Input in brackets: <%l>"\\
2424 In [2]: alias all echo "Input in brackets: <%l>"\\
2425 In [3]: all hello world\\
2425 In [3]: all hello world\\
2426 Input in brackets: <hello world>
2426 Input in brackets: <hello world>
2427
2427
2428 You can also define aliases with parameters using %s specifiers (one
2428 You can also define aliases with parameters using %s specifiers (one
2429 per parameter):
2429 per parameter):
2430
2430
2431 In [1]: alias parts echo first %s second %s\\
2431 In [1]: alias parts echo first %s second %s\\
2432 In [2]: %parts A B\\
2432 In [2]: %parts A B\\
2433 first A second B\\
2433 first A second B\\
2434 In [3]: %parts A\\
2434 In [3]: %parts A\\
2435 Incorrect number of arguments: 2 expected.\\
2435 Incorrect number of arguments: 2 expected.\\
2436 parts is an alias to: 'echo first %s second %s'
2436 parts is an alias to: 'echo first %s second %s'
2437
2437
2438 Note that %l and %s are mutually exclusive. You can only use one or
2438 Note that %l and %s are mutually exclusive. You can only use one or
2439 the other in your aliases.
2439 the other in your aliases.
2440
2440
2441 Aliases expand Python variables just like system calls using ! or !!
2441 Aliases expand Python variables just like system calls using ! or !!
2442 do: all expressions prefixed with '$' get expanded. For details of
2442 do: all expressions prefixed with '$' get expanded. For details of
2443 the semantic rules, see PEP-215:
2443 the semantic rules, see PEP-215:
2444 http://www.python.org/peps/pep-0215.html. This is the library used by
2444 http://www.python.org/peps/pep-0215.html. This is the library used by
2445 IPython for variable expansion. If you want to access a true shell
2445 IPython for variable expansion. If you want to access a true shell
2446 variable, an extra $ is necessary to prevent its expansion by IPython:
2446 variable, an extra $ is necessary to prevent its expansion by IPython:
2447
2447
2448 In [6]: alias show echo\\
2448 In [6]: alias show echo\\
2449 In [7]: PATH='A Python string'\\
2449 In [7]: PATH='A Python string'\\
2450 In [8]: show $PATH\\
2450 In [8]: show $PATH\\
2451 A Python string\\
2451 A Python string\\
2452 In [9]: show $$PATH\\
2452 In [9]: show $$PATH\\
2453 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2453 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2454
2454
2455 You can use the alias facility to acess all of $PATH. See the %rehash
2455 You can use the alias facility to acess all of $PATH. See the %rehash
2456 and %rehashx functions, which automatically create aliases for the
2456 and %rehashx functions, which automatically create aliases for the
2457 contents of your $PATH.
2457 contents of your $PATH.
2458
2458
2459 If called with no parameters, %alias prints the current alias table."""
2459 If called with no parameters, %alias prints the current alias table."""
2460
2460
2461 par = parameter_s.strip()
2461 par = parameter_s.strip()
2462 if not par:
2462 if not par:
2463 stored = self.db.get('stored_aliases', {} )
2463 stored = self.db.get('stored_aliases', {} )
2464 atab = self.shell.alias_table
2464 atab = self.shell.alias_table
2465 aliases = atab.keys()
2465 aliases = atab.keys()
2466 aliases.sort()
2466 aliases.sort()
2467 res = []
2467 res = []
2468 showlast = []
2468 showlast = []
2469 for alias in aliases:
2469 for alias in aliases:
2470 tgt = atab[alias][1]
2470 tgt = atab[alias][1]
2471 # 'interesting' aliases
2471 # 'interesting' aliases
2472 if (alias in stored or
2472 if (alias in stored or
2473 alias != os.path.splitext(tgt)[0] or
2473 alias != os.path.splitext(tgt)[0] or
2474 ' ' in tgt):
2474 ' ' in tgt):
2475 showlast.append((alias, tgt))
2475 showlast.append((alias, tgt))
2476 else:
2476 else:
2477 res.append((alias, tgt ))
2477 res.append((alias, tgt ))
2478
2478
2479 # show most interesting aliases last
2479 # show most interesting aliases last
2480 res.extend(showlast)
2480 res.extend(showlast)
2481 print "Total number of aliases:",len(aliases)
2481 print "Total number of aliases:",len(aliases)
2482 return res
2482 return res
2483 try:
2483 try:
2484 alias,cmd = par.split(None,1)
2484 alias,cmd = par.split(None,1)
2485 except:
2485 except:
2486 print OInspect.getdoc(self.magic_alias)
2486 print OInspect.getdoc(self.magic_alias)
2487 else:
2487 else:
2488 nargs = cmd.count('%s')
2488 nargs = cmd.count('%s')
2489 if nargs>0 and cmd.find('%l')>=0:
2489 if nargs>0 and cmd.find('%l')>=0:
2490 error('The %s and %l specifiers are mutually exclusive '
2490 error('The %s and %l specifiers are mutually exclusive '
2491 'in alias definitions.')
2491 'in alias definitions.')
2492 else: # all looks OK
2492 else: # all looks OK
2493 self.shell.alias_table[alias] = (nargs,cmd)
2493 self.shell.alias_table[alias] = (nargs,cmd)
2494 self.shell.alias_table_validate(verbose=0)
2494 self.shell.alias_table_validate(verbose=0)
2495 # end magic_alias
2495 # end magic_alias
2496
2496
2497 def magic_unalias(self, parameter_s = ''):
2497 def magic_unalias(self, parameter_s = ''):
2498 """Remove an alias"""
2498 """Remove an alias"""
2499
2499
2500 aname = parameter_s.strip()
2500 aname = parameter_s.strip()
2501 if aname in self.shell.alias_table:
2501 if aname in self.shell.alias_table:
2502 del self.shell.alias_table[aname]
2502 del self.shell.alias_table[aname]
2503 stored = self.db.get('stored_aliases', {} )
2503 stored = self.db.get('stored_aliases', {} )
2504 if aname in stored:
2504 if aname in stored:
2505 print "Removing %stored alias",aname
2505 print "Removing %stored alias",aname
2506 del stored[aname]
2506 del stored[aname]
2507 self.db['stored_aliases'] = stored
2507 self.db['stored_aliases'] = stored
2508
2508
2509 def magic_rehash(self, parameter_s = ''):
2509 def magic_rehash(self, parameter_s = ''):
2510 """Update the alias table with all entries in $PATH.
2510 """Update the alias table with all entries in $PATH.
2511
2511
2512 This version does no checks on execute permissions or whether the
2512 This version does no checks on execute permissions or whether the
2513 contents of $PATH are truly files (instead of directories or something
2513 contents of $PATH are truly files (instead of directories or something
2514 else). For such a safer (but slower) version, use %rehashx."""
2514 else). For such a safer (but slower) version, use %rehashx."""
2515
2515
2516 # This function (and rehashx) manipulate the alias_table directly
2516 # This function (and rehashx) manipulate the alias_table directly
2517 # rather than calling magic_alias, for speed reasons. A rehash on a
2517 # rather than calling magic_alias, for speed reasons. A rehash on a
2518 # typical Linux box involves several thousand entries, so efficiency
2518 # typical Linux box involves several thousand entries, so efficiency
2519 # here is a top concern.
2519 # here is a top concern.
2520
2520
2521 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2521 path = filter(os.path.isdir,os.environ.get('PATH','').split(os.pathsep))
2522 alias_table = self.shell.alias_table
2522 alias_table = self.shell.alias_table
2523 for pdir in path:
2523 for pdir in path:
2524 for ff in os.listdir(pdir):
2524 for ff in os.listdir(pdir):
2525 # each entry in the alias table must be (N,name), where
2525 # each entry in the alias table must be (N,name), where
2526 # N is the number of positional arguments of the alias.
2526 # N is the number of positional arguments of the alias.
2527 alias_table[ff] = (0,ff)
2527 alias_table[ff] = (0,ff)
2528 # Make sure the alias table doesn't contain keywords or builtins
2528 # Make sure the alias table doesn't contain keywords or builtins
2529 self.shell.alias_table_validate()
2529 self.shell.alias_table_validate()
2530 # Call again init_auto_alias() so we get 'rm -i' and other modified
2530 # Call again init_auto_alias() so we get 'rm -i' and other modified
2531 # aliases since %rehash will probably clobber them
2531 # aliases since %rehash will probably clobber them
2532 self.shell.init_auto_alias()
2532 self.shell.init_auto_alias()
2533
2533
2534 def magic_rehashx(self, parameter_s = ''):
2534 def magic_rehashx(self, parameter_s = ''):
2535 """Update the alias table with all executable files in $PATH.
2535 """Update the alias table with all executable files in $PATH.
2536
2536
2537 This version explicitly checks that every entry in $PATH is a file
2537 This version explicitly checks that every entry in $PATH is a file
2538 with execute access (os.X_OK), so it is much slower than %rehash.
2538 with execute access (os.X_OK), so it is much slower than %rehash.
2539
2539
2540 Under Windows, it checks executability as a match agains a
2540 Under Windows, it checks executability as a match agains a
2541 '|'-separated string of extensions, stored in the IPython config
2541 '|'-separated string of extensions, stored in the IPython config
2542 variable win_exec_ext. This defaults to 'exe|com|bat'.
2542 variable win_exec_ext. This defaults to 'exe|com|bat'.
2543
2543
2544 This function also resets the root module cache of module completer,
2544 This function also resets the root module cache of module completer,
2545 used on slow filesystems.
2545 used on slow filesystems.
2546 """
2546 """
2547
2547
2548
2548
2549 ip = self.api
2549 ip = self.api
2550
2550
2551 # for the benefit of module completer in ipy_completers.py
2551 # for the benefit of module completer in ipy_completers.py
2552 del ip.db['rootmodules']
2552 del ip.db['rootmodules']
2553
2553
2554 path = [os.path.abspath(os.path.expanduser(p)) for p in
2554 path = [os.path.abspath(os.path.expanduser(p)) for p in
2555 os.environ['PATH'].split(os.pathsep)]
2555 os.environ.get('PATH','').split(os.pathsep)]
2556 path = filter(os.path.isdir,path)
2556 path = filter(os.path.isdir,path)
2557
2557
2558 alias_table = self.shell.alias_table
2558 alias_table = self.shell.alias_table
2559 syscmdlist = []
2559 syscmdlist = []
2560 if os.name == 'posix':
2560 if os.name == 'posix':
2561 isexec = lambda fname:os.path.isfile(fname) and \
2561 isexec = lambda fname:os.path.isfile(fname) and \
2562 os.access(fname,os.X_OK)
2562 os.access(fname,os.X_OK)
2563 else:
2563 else:
2564
2564
2565 try:
2565 try:
2566 winext = os.environ['pathext'].replace(';','|').replace('.','')
2566 winext = os.environ['pathext'].replace(';','|').replace('.','')
2567 except KeyError:
2567 except KeyError:
2568 winext = 'exe|com|bat|py'
2568 winext = 'exe|com|bat|py'
2569 if 'py' not in winext:
2569 if 'py' not in winext:
2570 winext += '|py'
2570 winext += '|py'
2571 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2571 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2572 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2572 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2573 savedir = os.getcwd()
2573 savedir = os.getcwd()
2574 try:
2574 try:
2575 # write the whole loop for posix/Windows so we don't have an if in
2575 # write the whole loop for posix/Windows so we don't have an if in
2576 # the innermost part
2576 # the innermost part
2577 if os.name == 'posix':
2577 if os.name == 'posix':
2578 for pdir in path:
2578 for pdir in path:
2579 os.chdir(pdir)
2579 os.chdir(pdir)
2580 for ff in os.listdir(pdir):
2580 for ff in os.listdir(pdir):
2581 if isexec(ff) and ff not in self.shell.no_alias:
2581 if isexec(ff) and ff not in self.shell.no_alias:
2582 # each entry in the alias table must be (N,name),
2582 # each entry in the alias table must be (N,name),
2583 # where N is the number of positional arguments of the
2583 # where N is the number of positional arguments of the
2584 # alias.
2584 # alias.
2585 alias_table[ff] = (0,ff)
2585 alias_table[ff] = (0,ff)
2586 syscmdlist.append(ff)
2586 syscmdlist.append(ff)
2587 else:
2587 else:
2588 for pdir in path:
2588 for pdir in path:
2589 os.chdir(pdir)
2589 os.chdir(pdir)
2590 for ff in os.listdir(pdir):
2590 for ff in os.listdir(pdir):
2591 base, ext = os.path.splitext(ff)
2591 base, ext = os.path.splitext(ff)
2592 if isexec(ff) and base not in self.shell.no_alias:
2592 if isexec(ff) and base not in self.shell.no_alias:
2593 if ext.lower() == '.exe':
2593 if ext.lower() == '.exe':
2594 ff = base
2594 ff = base
2595 alias_table[base] = (0,ff)
2595 alias_table[base] = (0,ff)
2596 syscmdlist.append(ff)
2596 syscmdlist.append(ff)
2597 # Make sure the alias table doesn't contain keywords or builtins
2597 # Make sure the alias table doesn't contain keywords or builtins
2598 self.shell.alias_table_validate()
2598 self.shell.alias_table_validate()
2599 # Call again init_auto_alias() so we get 'rm -i' and other
2599 # Call again init_auto_alias() so we get 'rm -i' and other
2600 # modified aliases since %rehashx will probably clobber them
2600 # modified aliases since %rehashx will probably clobber them
2601 self.shell.init_auto_alias()
2601 self.shell.init_auto_alias()
2602 db = ip.db
2602 db = ip.db
2603 db['syscmdlist'] = syscmdlist
2603 db['syscmdlist'] = syscmdlist
2604 finally:
2604 finally:
2605 os.chdir(savedir)
2605 os.chdir(savedir)
2606
2606
2607 def magic_pwd(self, parameter_s = ''):
2607 def magic_pwd(self, parameter_s = ''):
2608 """Return the current working directory path."""
2608 """Return the current working directory path."""
2609 return os.getcwd()
2609 return os.getcwd()
2610
2610
2611 def magic_cd(self, parameter_s=''):
2611 def magic_cd(self, parameter_s=''):
2612 """Change the current working directory.
2612 """Change the current working directory.
2613
2613
2614 This command automatically maintains an internal list of directories
2614 This command automatically maintains an internal list of directories
2615 you visit during your IPython session, in the variable _dh. The
2615 you visit during your IPython session, in the variable _dh. The
2616 command %dhist shows this history nicely formatted. You can also
2616 command %dhist shows this history nicely formatted. You can also
2617 do 'cd -<tab>' to see directory history conveniently.
2617 do 'cd -<tab>' to see directory history conveniently.
2618
2618
2619 Usage:
2619 Usage:
2620
2620
2621 cd 'dir': changes to directory 'dir'.
2621 cd 'dir': changes to directory 'dir'.
2622
2622
2623 cd -: changes to the last visited directory.
2623 cd -: changes to the last visited directory.
2624
2624
2625 cd -<n>: changes to the n-th directory in the directory history.
2625 cd -<n>: changes to the n-th directory in the directory history.
2626
2626
2627 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2627 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2628 (note: cd <bookmark_name> is enough if there is no
2628 (note: cd <bookmark_name> is enough if there is no
2629 directory <bookmark_name>, but a bookmark with the name exists.)
2629 directory <bookmark_name>, but a bookmark with the name exists.)
2630 'cd -b <tab>' allows you to tab-complete bookmark names.
2630 'cd -b <tab>' allows you to tab-complete bookmark names.
2631
2631
2632 Options:
2632 Options:
2633
2633
2634 -q: quiet. Do not print the working directory after the cd command is
2634 -q: quiet. Do not print the working directory after the cd command is
2635 executed. By default IPython's cd command does print this directory,
2635 executed. By default IPython's cd command does print this directory,
2636 since the default prompts do not display path information.
2636 since the default prompts do not display path information.
2637
2637
2638 Note that !cd doesn't work for this purpose because the shell where
2638 Note that !cd doesn't work for this purpose because the shell where
2639 !command runs is immediately discarded after executing 'command'."""
2639 !command runs is immediately discarded after executing 'command'."""
2640
2640
2641 parameter_s = parameter_s.strip()
2641 parameter_s = parameter_s.strip()
2642 #bkms = self.shell.persist.get("bookmarks",{})
2642 #bkms = self.shell.persist.get("bookmarks",{})
2643
2643
2644 numcd = re.match(r'(-)(\d+)$',parameter_s)
2644 numcd = re.match(r'(-)(\d+)$',parameter_s)
2645 # jump in directory history by number
2645 # jump in directory history by number
2646 if numcd:
2646 if numcd:
2647 nn = int(numcd.group(2))
2647 nn = int(numcd.group(2))
2648 try:
2648 try:
2649 ps = self.shell.user_ns['_dh'][nn]
2649 ps = self.shell.user_ns['_dh'][nn]
2650 except IndexError:
2650 except IndexError:
2651 print 'The requested directory does not exist in history.'
2651 print 'The requested directory does not exist in history.'
2652 return
2652 return
2653 else:
2653 else:
2654 opts = {}
2654 opts = {}
2655 else:
2655 else:
2656 #turn all non-space-escaping backslashes to slashes,
2656 #turn all non-space-escaping backslashes to slashes,
2657 # for c:\windows\directory\names\
2657 # for c:\windows\directory\names\
2658 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2658 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2659 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2659 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2660 # jump to previous
2660 # jump to previous
2661 if ps == '-':
2661 if ps == '-':
2662 try:
2662 try:
2663 ps = self.shell.user_ns['_dh'][-2]
2663 ps = self.shell.user_ns['_dh'][-2]
2664 except IndexError:
2664 except IndexError:
2665 print 'No previous directory to change to.'
2665 print 'No previous directory to change to.'
2666 return
2666 return
2667 # jump to bookmark if needed
2667 # jump to bookmark if needed
2668 else:
2668 else:
2669 if not os.path.isdir(ps) or opts.has_key('b'):
2669 if not os.path.isdir(ps) or opts.has_key('b'):
2670 bkms = self.db.get('bookmarks', {})
2670 bkms = self.db.get('bookmarks', {})
2671
2671
2672 if bkms.has_key(ps):
2672 if bkms.has_key(ps):
2673 target = bkms[ps]
2673 target = bkms[ps]
2674 print '(bookmark:%s) -> %s' % (ps,target)
2674 print '(bookmark:%s) -> %s' % (ps,target)
2675 ps = target
2675 ps = target
2676 else:
2676 else:
2677 if opts.has_key('b'):
2677 if opts.has_key('b'):
2678 error("Bookmark '%s' not found. "
2678 error("Bookmark '%s' not found. "
2679 "Use '%%bookmark -l' to see your bookmarks." % ps)
2679 "Use '%%bookmark -l' to see your bookmarks." % ps)
2680 return
2680 return
2681
2681
2682 # at this point ps should point to the target dir
2682 # at this point ps should point to the target dir
2683 if ps:
2683 if ps:
2684 try:
2684 try:
2685 os.chdir(os.path.expanduser(ps))
2685 os.chdir(os.path.expanduser(ps))
2686 if self.shell.rc.term_title:
2686 if self.shell.rc.term_title:
2687 #print 'set term title:',self.shell.rc.term_title # dbg
2687 #print 'set term title:',self.shell.rc.term_title # dbg
2688 ttitle = ("IPy:" + (
2688 ttitle = ("IPy:" + (
2689 os.getcwd() == '/' and '/' or \
2689 os.getcwd() == '/' and '/' or \
2690 os.path.basename(os.getcwd())))
2690 os.path.basename(os.getcwd())))
2691 platutils.set_term_title(ttitle)
2691 platutils.set_term_title(ttitle)
2692 except OSError:
2692 except OSError:
2693 print sys.exc_info()[1]
2693 print sys.exc_info()[1]
2694 else:
2694 else:
2695 self.shell.user_ns['_dh'].append(os.getcwd())
2695 self.shell.user_ns['_dh'].append(os.getcwd())
2696 else:
2696 else:
2697 os.chdir(self.shell.home_dir)
2697 os.chdir(self.shell.home_dir)
2698 if self.shell.rc.term_title:
2698 if self.shell.rc.term_title:
2699 platutils.set_term_title("IPy:~")
2699 platutils.set_term_title("IPy:~")
2700 self.shell.user_ns['_dh'].append(os.getcwd())
2700 self.shell.user_ns['_dh'].append(os.getcwd())
2701 if not 'q' in opts:
2701 if not 'q' in opts:
2702 print self.shell.user_ns['_dh'][-1]
2702 print self.shell.user_ns['_dh'][-1]
2703
2703
2704 def magic_dhist(self, parameter_s=''):
2704 def magic_dhist(self, parameter_s=''):
2705 """Print your history of visited directories.
2705 """Print your history of visited directories.
2706
2706
2707 %dhist -> print full history\\
2707 %dhist -> print full history\\
2708 %dhist n -> print last n entries only\\
2708 %dhist n -> print last n entries only\\
2709 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2709 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2710
2710
2711 This history is automatically maintained by the %cd command, and
2711 This history is automatically maintained by the %cd command, and
2712 always available as the global list variable _dh. You can use %cd -<n>
2712 always available as the global list variable _dh. You can use %cd -<n>
2713 to go to directory number <n>."""
2713 to go to directory number <n>."""
2714
2714
2715 dh = self.shell.user_ns['_dh']
2715 dh = self.shell.user_ns['_dh']
2716 if parameter_s:
2716 if parameter_s:
2717 try:
2717 try:
2718 args = map(int,parameter_s.split())
2718 args = map(int,parameter_s.split())
2719 except:
2719 except:
2720 self.arg_err(Magic.magic_dhist)
2720 self.arg_err(Magic.magic_dhist)
2721 return
2721 return
2722 if len(args) == 1:
2722 if len(args) == 1:
2723 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2723 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2724 elif len(args) == 2:
2724 elif len(args) == 2:
2725 ini,fin = args
2725 ini,fin = args
2726 else:
2726 else:
2727 self.arg_err(Magic.magic_dhist)
2727 self.arg_err(Magic.magic_dhist)
2728 return
2728 return
2729 else:
2729 else:
2730 ini,fin = 0,len(dh)
2730 ini,fin = 0,len(dh)
2731 nlprint(dh,
2731 nlprint(dh,
2732 header = 'Directory history (kept in _dh)',
2732 header = 'Directory history (kept in _dh)',
2733 start=ini,stop=fin)
2733 start=ini,stop=fin)
2734
2734
2735 def magic_env(self, parameter_s=''):
2735 def magic_env(self, parameter_s=''):
2736 """List environment variables."""
2736 """List environment variables."""
2737
2737
2738 return os.environ.data
2738 return os.environ.data
2739
2739
2740 def magic_pushd(self, parameter_s=''):
2740 def magic_pushd(self, parameter_s=''):
2741 """Place the current dir on stack and change directory.
2741 """Place the current dir on stack and change directory.
2742
2742
2743 Usage:\\
2743 Usage:\\
2744 %pushd ['dirname']
2744 %pushd ['dirname']
2745
2745
2746 %pushd with no arguments does a %pushd to your home directory.
2746 %pushd with no arguments does a %pushd to your home directory.
2747 """
2747 """
2748 if parameter_s == '': parameter_s = '~'
2748 if parameter_s == '': parameter_s = '~'
2749 dir_s = self.shell.dir_stack
2749 dir_s = self.shell.dir_stack
2750 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2750 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2751 os.path.expanduser(self.shell.dir_stack[0]):
2751 os.path.expanduser(self.shell.dir_stack[0]):
2752 try:
2752 try:
2753 self.magic_cd(parameter_s)
2753 self.magic_cd(parameter_s)
2754 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2754 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2755 self.magic_dirs()
2755 self.magic_dirs()
2756 except:
2756 except:
2757 print 'Invalid directory'
2757 print 'Invalid directory'
2758 else:
2758 else:
2759 print 'You are already there!'
2759 print 'You are already there!'
2760
2760
2761 def magic_popd(self, parameter_s=''):
2761 def magic_popd(self, parameter_s=''):
2762 """Change to directory popped off the top of the stack.
2762 """Change to directory popped off the top of the stack.
2763 """
2763 """
2764 if len (self.shell.dir_stack) > 1:
2764 if len (self.shell.dir_stack) > 1:
2765 self.shell.dir_stack.pop(0)
2765 self.shell.dir_stack.pop(0)
2766 self.magic_cd(self.shell.dir_stack[0])
2766 self.magic_cd(self.shell.dir_stack[0])
2767 print self.shell.dir_stack[0]
2767 print self.shell.dir_stack[0]
2768 else:
2768 else:
2769 print "You can't remove the starting directory from the stack:",\
2769 print "You can't remove the starting directory from the stack:",\
2770 self.shell.dir_stack
2770 self.shell.dir_stack
2771
2771
2772 def magic_dirs(self, parameter_s=''):
2772 def magic_dirs(self, parameter_s=''):
2773 """Return the current directory stack."""
2773 """Return the current directory stack."""
2774
2774
2775 return self.shell.dir_stack[:]
2775 return self.shell.dir_stack[:]
2776
2776
2777 def magic_sc(self, parameter_s=''):
2777 def magic_sc(self, parameter_s=''):
2778 """Shell capture - execute a shell command and capture its output.
2778 """Shell capture - execute a shell command and capture its output.
2779
2779
2780 DEPRECATED. Suboptimal, retained for backwards compatibility.
2780 DEPRECATED. Suboptimal, retained for backwards compatibility.
2781
2781
2782 You should use the form 'var = !command' instead. Example:
2782 You should use the form 'var = !command' instead. Example:
2783
2783
2784 "%sc -l myfiles = ls ~" should now be written as
2784 "%sc -l myfiles = ls ~" should now be written as
2785
2785
2786 "myfiles = !ls ~"
2786 "myfiles = !ls ~"
2787
2787
2788 myfiles.s, myfiles.l and myfiles.n still apply as documented
2788 myfiles.s, myfiles.l and myfiles.n still apply as documented
2789 below.
2789 below.
2790
2790
2791 --
2791 --
2792 %sc [options] varname=command
2792 %sc [options] varname=command
2793
2793
2794 IPython will run the given command using commands.getoutput(), and
2794 IPython will run the given command using commands.getoutput(), and
2795 will then update the user's interactive namespace with a variable
2795 will then update the user's interactive namespace with a variable
2796 called varname, containing the value of the call. Your command can
2796 called varname, containing the value of the call. Your command can
2797 contain shell wildcards, pipes, etc.
2797 contain shell wildcards, pipes, etc.
2798
2798
2799 The '=' sign in the syntax is mandatory, and the variable name you
2799 The '=' sign in the syntax is mandatory, and the variable name you
2800 supply must follow Python's standard conventions for valid names.
2800 supply must follow Python's standard conventions for valid names.
2801
2801
2802 (A special format without variable name exists for internal use)
2802 (A special format without variable name exists for internal use)
2803
2803
2804 Options:
2804 Options:
2805
2805
2806 -l: list output. Split the output on newlines into a list before
2806 -l: list output. Split the output on newlines into a list before
2807 assigning it to the given variable. By default the output is stored
2807 assigning it to the given variable. By default the output is stored
2808 as a single string.
2808 as a single string.
2809
2809
2810 -v: verbose. Print the contents of the variable.
2810 -v: verbose. Print the contents of the variable.
2811
2811
2812 In most cases you should not need to split as a list, because the
2812 In most cases you should not need to split as a list, because the
2813 returned value is a special type of string which can automatically
2813 returned value is a special type of string which can automatically
2814 provide its contents either as a list (split on newlines) or as a
2814 provide its contents either as a list (split on newlines) or as a
2815 space-separated string. These are convenient, respectively, either
2815 space-separated string. These are convenient, respectively, either
2816 for sequential processing or to be passed to a shell command.
2816 for sequential processing or to be passed to a shell command.
2817
2817
2818 For example:
2818 For example:
2819
2819
2820 # Capture into variable a
2820 # Capture into variable a
2821 In [9]: sc a=ls *py
2821 In [9]: sc a=ls *py
2822
2822
2823 # a is a string with embedded newlines
2823 # a is a string with embedded newlines
2824 In [10]: a
2824 In [10]: a
2825 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2825 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2826
2826
2827 # which can be seen as a list:
2827 # which can be seen as a list:
2828 In [11]: a.l
2828 In [11]: a.l
2829 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2829 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2830
2830
2831 # or as a whitespace-separated string:
2831 # or as a whitespace-separated string:
2832 In [12]: a.s
2832 In [12]: a.s
2833 Out[12]: 'setup.py win32_manual_post_install.py'
2833 Out[12]: 'setup.py win32_manual_post_install.py'
2834
2834
2835 # a.s is useful to pass as a single command line:
2835 # a.s is useful to pass as a single command line:
2836 In [13]: !wc -l $a.s
2836 In [13]: !wc -l $a.s
2837 146 setup.py
2837 146 setup.py
2838 130 win32_manual_post_install.py
2838 130 win32_manual_post_install.py
2839 276 total
2839 276 total
2840
2840
2841 # while the list form is useful to loop over:
2841 # while the list form is useful to loop over:
2842 In [14]: for f in a.l:
2842 In [14]: for f in a.l:
2843 ....: !wc -l $f
2843 ....: !wc -l $f
2844 ....:
2844 ....:
2845 146 setup.py
2845 146 setup.py
2846 130 win32_manual_post_install.py
2846 130 win32_manual_post_install.py
2847
2847
2848 Similiarly, the lists returned by the -l option are also special, in
2848 Similiarly, the lists returned by the -l option are also special, in
2849 the sense that you can equally invoke the .s attribute on them to
2849 the sense that you can equally invoke the .s attribute on them to
2850 automatically get a whitespace-separated string from their contents:
2850 automatically get a whitespace-separated string from their contents:
2851
2851
2852 In [1]: sc -l b=ls *py
2852 In [1]: sc -l b=ls *py
2853
2853
2854 In [2]: b
2854 In [2]: b
2855 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2855 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2856
2856
2857 In [3]: b.s
2857 In [3]: b.s
2858 Out[3]: 'setup.py win32_manual_post_install.py'
2858 Out[3]: 'setup.py win32_manual_post_install.py'
2859
2859
2860 In summary, both the lists and strings used for ouptut capture have
2860 In summary, both the lists and strings used for ouptut capture have
2861 the following special attributes:
2861 the following special attributes:
2862
2862
2863 .l (or .list) : value as list.
2863 .l (or .list) : value as list.
2864 .n (or .nlstr): value as newline-separated string.
2864 .n (or .nlstr): value as newline-separated string.
2865 .s (or .spstr): value as space-separated string.
2865 .s (or .spstr): value as space-separated string.
2866 """
2866 """
2867
2867
2868 opts,args = self.parse_options(parameter_s,'lv')
2868 opts,args = self.parse_options(parameter_s,'lv')
2869 # Try to get a variable name and command to run
2869 # Try to get a variable name and command to run
2870 try:
2870 try:
2871 # the variable name must be obtained from the parse_options
2871 # the variable name must be obtained from the parse_options
2872 # output, which uses shlex.split to strip options out.
2872 # output, which uses shlex.split to strip options out.
2873 var,_ = args.split('=',1)
2873 var,_ = args.split('=',1)
2874 var = var.strip()
2874 var = var.strip()
2875 # But the the command has to be extracted from the original input
2875 # But the the command has to be extracted from the original input
2876 # parameter_s, not on what parse_options returns, to avoid the
2876 # parameter_s, not on what parse_options returns, to avoid the
2877 # quote stripping which shlex.split performs on it.
2877 # quote stripping which shlex.split performs on it.
2878 _,cmd = parameter_s.split('=',1)
2878 _,cmd = parameter_s.split('=',1)
2879 except ValueError:
2879 except ValueError:
2880 var,cmd = '',''
2880 var,cmd = '',''
2881 # If all looks ok, proceed
2881 # If all looks ok, proceed
2882 out,err = self.shell.getoutputerror(cmd)
2882 out,err = self.shell.getoutputerror(cmd)
2883 if err:
2883 if err:
2884 print >> Term.cerr,err
2884 print >> Term.cerr,err
2885 if opts.has_key('l'):
2885 if opts.has_key('l'):
2886 out = SList(out.split('\n'))
2886 out = SList(out.split('\n'))
2887 else:
2887 else:
2888 out = LSString(out)
2888 out = LSString(out)
2889 if opts.has_key('v'):
2889 if opts.has_key('v'):
2890 print '%s ==\n%s' % (var,pformat(out))
2890 print '%s ==\n%s' % (var,pformat(out))
2891 if var:
2891 if var:
2892 self.shell.user_ns.update({var:out})
2892 self.shell.user_ns.update({var:out})
2893 else:
2893 else:
2894 return out
2894 return out
2895
2895
2896 def magic_sx(self, parameter_s=''):
2896 def magic_sx(self, parameter_s=''):
2897 """Shell execute - run a shell command and capture its output.
2897 """Shell execute - run a shell command and capture its output.
2898
2898
2899 %sx command
2899 %sx command
2900
2900
2901 IPython will run the given command using commands.getoutput(), and
2901 IPython will run the given command using commands.getoutput(), and
2902 return the result formatted as a list (split on '\\n'). Since the
2902 return the result formatted as a list (split on '\\n'). Since the
2903 output is _returned_, it will be stored in ipython's regular output
2903 output is _returned_, it will be stored in ipython's regular output
2904 cache Out[N] and in the '_N' automatic variables.
2904 cache Out[N] and in the '_N' automatic variables.
2905
2905
2906 Notes:
2906 Notes:
2907
2907
2908 1) If an input line begins with '!!', then %sx is automatically
2908 1) If an input line begins with '!!', then %sx is automatically
2909 invoked. That is, while:
2909 invoked. That is, while:
2910 !ls
2910 !ls
2911 causes ipython to simply issue system('ls'), typing
2911 causes ipython to simply issue system('ls'), typing
2912 !!ls
2912 !!ls
2913 is a shorthand equivalent to:
2913 is a shorthand equivalent to:
2914 %sx ls
2914 %sx ls
2915
2915
2916 2) %sx differs from %sc in that %sx automatically splits into a list,
2916 2) %sx differs from %sc in that %sx automatically splits into a list,
2917 like '%sc -l'. The reason for this is to make it as easy as possible
2917 like '%sc -l'. The reason for this is to make it as easy as possible
2918 to process line-oriented shell output via further python commands.
2918 to process line-oriented shell output via further python commands.
2919 %sc is meant to provide much finer control, but requires more
2919 %sc is meant to provide much finer control, but requires more
2920 typing.
2920 typing.
2921
2921
2922 3) Just like %sc -l, this is a list with special attributes:
2922 3) Just like %sc -l, this is a list with special attributes:
2923
2923
2924 .l (or .list) : value as list.
2924 .l (or .list) : value as list.
2925 .n (or .nlstr): value as newline-separated string.
2925 .n (or .nlstr): value as newline-separated string.
2926 .s (or .spstr): value as whitespace-separated string.
2926 .s (or .spstr): value as whitespace-separated string.
2927
2927
2928 This is very useful when trying to use such lists as arguments to
2928 This is very useful when trying to use such lists as arguments to
2929 system commands."""
2929 system commands."""
2930
2930
2931 if parameter_s:
2931 if parameter_s:
2932 out,err = self.shell.getoutputerror(parameter_s)
2932 out,err = self.shell.getoutputerror(parameter_s)
2933 if err:
2933 if err:
2934 print >> Term.cerr,err
2934 print >> Term.cerr,err
2935 return SList(out.split('\n'))
2935 return SList(out.split('\n'))
2936
2936
2937 def magic_bg(self, parameter_s=''):
2937 def magic_bg(self, parameter_s=''):
2938 """Run a job in the background, in a separate thread.
2938 """Run a job in the background, in a separate thread.
2939
2939
2940 For example,
2940 For example,
2941
2941
2942 %bg myfunc(x,y,z=1)
2942 %bg myfunc(x,y,z=1)
2943
2943
2944 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2944 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2945 execution starts, a message will be printed indicating the job
2945 execution starts, a message will be printed indicating the job
2946 number. If your job number is 5, you can use
2946 number. If your job number is 5, you can use
2947
2947
2948 myvar = jobs.result(5) or myvar = jobs[5].result
2948 myvar = jobs.result(5) or myvar = jobs[5].result
2949
2949
2950 to assign this result to variable 'myvar'.
2950 to assign this result to variable 'myvar'.
2951
2951
2952 IPython has a job manager, accessible via the 'jobs' object. You can
2952 IPython has a job manager, accessible via the 'jobs' object. You can
2953 type jobs? to get more information about it, and use jobs.<TAB> to see
2953 type jobs? to get more information about it, and use jobs.<TAB> to see
2954 its attributes. All attributes not starting with an underscore are
2954 its attributes. All attributes not starting with an underscore are
2955 meant for public use.
2955 meant for public use.
2956
2956
2957 In particular, look at the jobs.new() method, which is used to create
2957 In particular, look at the jobs.new() method, which is used to create
2958 new jobs. This magic %bg function is just a convenience wrapper
2958 new jobs. This magic %bg function is just a convenience wrapper
2959 around jobs.new(), for expression-based jobs. If you want to create a
2959 around jobs.new(), for expression-based jobs. If you want to create a
2960 new job with an explicit function object and arguments, you must call
2960 new job with an explicit function object and arguments, you must call
2961 jobs.new() directly.
2961 jobs.new() directly.
2962
2962
2963 The jobs.new docstring also describes in detail several important
2963 The jobs.new docstring also describes in detail several important
2964 caveats associated with a thread-based model for background job
2964 caveats associated with a thread-based model for background job
2965 execution. Type jobs.new? for details.
2965 execution. Type jobs.new? for details.
2966
2966
2967 You can check the status of all jobs with jobs.status().
2967 You can check the status of all jobs with jobs.status().
2968
2968
2969 The jobs variable is set by IPython into the Python builtin namespace.
2969 The jobs variable is set by IPython into the Python builtin namespace.
2970 If you ever declare a variable named 'jobs', you will shadow this
2970 If you ever declare a variable named 'jobs', you will shadow this
2971 name. You can either delete your global jobs variable to regain
2971 name. You can either delete your global jobs variable to regain
2972 access to the job manager, or make a new name and assign it manually
2972 access to the job manager, or make a new name and assign it manually
2973 to the manager (stored in IPython's namespace). For example, to
2973 to the manager (stored in IPython's namespace). For example, to
2974 assign the job manager to the Jobs name, use:
2974 assign the job manager to the Jobs name, use:
2975
2975
2976 Jobs = __builtins__.jobs"""
2976 Jobs = __builtins__.jobs"""
2977
2977
2978 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2978 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2979
2979
2980
2980
2981 def magic_bookmark(self, parameter_s=''):
2981 def magic_bookmark(self, parameter_s=''):
2982 """Manage IPython's bookmark system.
2982 """Manage IPython's bookmark system.
2983
2983
2984 %bookmark <name> - set bookmark to current dir
2984 %bookmark <name> - set bookmark to current dir
2985 %bookmark <name> <dir> - set bookmark to <dir>
2985 %bookmark <name> <dir> - set bookmark to <dir>
2986 %bookmark -l - list all bookmarks
2986 %bookmark -l - list all bookmarks
2987 %bookmark -d <name> - remove bookmark
2987 %bookmark -d <name> - remove bookmark
2988 %bookmark -r - remove all bookmarks
2988 %bookmark -r - remove all bookmarks
2989
2989
2990 You can later on access a bookmarked folder with:
2990 You can later on access a bookmarked folder with:
2991 %cd -b <name>
2991 %cd -b <name>
2992 or simply '%cd <name>' if there is no directory called <name> AND
2992 or simply '%cd <name>' if there is no directory called <name> AND
2993 there is such a bookmark defined.
2993 there is such a bookmark defined.
2994
2994
2995 Your bookmarks persist through IPython sessions, but they are
2995 Your bookmarks persist through IPython sessions, but they are
2996 associated with each profile."""
2996 associated with each profile."""
2997
2997
2998 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2998 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2999 if len(args) > 2:
2999 if len(args) > 2:
3000 error('You can only give at most two arguments')
3000 error('You can only give at most two arguments')
3001 return
3001 return
3002
3002
3003 bkms = self.db.get('bookmarks',{})
3003 bkms = self.db.get('bookmarks',{})
3004
3004
3005 if opts.has_key('d'):
3005 if opts.has_key('d'):
3006 try:
3006 try:
3007 todel = args[0]
3007 todel = args[0]
3008 except IndexError:
3008 except IndexError:
3009 error('You must provide a bookmark to delete')
3009 error('You must provide a bookmark to delete')
3010 else:
3010 else:
3011 try:
3011 try:
3012 del bkms[todel]
3012 del bkms[todel]
3013 except:
3013 except:
3014 error("Can't delete bookmark '%s'" % todel)
3014 error("Can't delete bookmark '%s'" % todel)
3015 elif opts.has_key('r'):
3015 elif opts.has_key('r'):
3016 bkms = {}
3016 bkms = {}
3017 elif opts.has_key('l'):
3017 elif opts.has_key('l'):
3018 bks = bkms.keys()
3018 bks = bkms.keys()
3019 bks.sort()
3019 bks.sort()
3020 if bks:
3020 if bks:
3021 size = max(map(len,bks))
3021 size = max(map(len,bks))
3022 else:
3022 else:
3023 size = 0
3023 size = 0
3024 fmt = '%-'+str(size)+'s -> %s'
3024 fmt = '%-'+str(size)+'s -> %s'
3025 print 'Current bookmarks:'
3025 print 'Current bookmarks:'
3026 for bk in bks:
3026 for bk in bks:
3027 print fmt % (bk,bkms[bk])
3027 print fmt % (bk,bkms[bk])
3028 else:
3028 else:
3029 if not args:
3029 if not args:
3030 error("You must specify the bookmark name")
3030 error("You must specify the bookmark name")
3031 elif len(args)==1:
3031 elif len(args)==1:
3032 bkms[args[0]] = os.getcwd()
3032 bkms[args[0]] = os.getcwd()
3033 elif len(args)==2:
3033 elif len(args)==2:
3034 bkms[args[0]] = args[1]
3034 bkms[args[0]] = args[1]
3035 self.db['bookmarks'] = bkms
3035 self.db['bookmarks'] = bkms
3036
3036
3037 def magic_pycat(self, parameter_s=''):
3037 def magic_pycat(self, parameter_s=''):
3038 """Show a syntax-highlighted file through a pager.
3038 """Show a syntax-highlighted file through a pager.
3039
3039
3040 This magic is similar to the cat utility, but it will assume the file
3040 This magic is similar to the cat utility, but it will assume the file
3041 to be Python source and will show it with syntax highlighting. """
3041 to be Python source and will show it with syntax highlighting. """
3042
3042
3043 try:
3043 try:
3044 filename = get_py_filename(parameter_s)
3044 filename = get_py_filename(parameter_s)
3045 cont = file_read(filename)
3045 cont = file_read(filename)
3046 except IOError:
3046 except IOError:
3047 try:
3047 try:
3048 cont = eval(parameter_s,self.user_ns)
3048 cont = eval(parameter_s,self.user_ns)
3049 except NameError:
3049 except NameError:
3050 cont = None
3050 cont = None
3051 if cont is None:
3051 if cont is None:
3052 print "Error: no such file or variable"
3052 print "Error: no such file or variable"
3053 return
3053 return
3054
3054
3055 page(self.shell.pycolorize(cont),
3055 page(self.shell.pycolorize(cont),
3056 screen_lines=self.shell.rc.screen_length)
3056 screen_lines=self.shell.rc.screen_length)
3057
3057
3058 def magic_cpaste(self, parameter_s=''):
3058 def magic_cpaste(self, parameter_s=''):
3059 """Allows you to paste & execute a pre-formatted code block from clipboard
3059 """Allows you to paste & execute a pre-formatted code block from clipboard
3060
3060
3061 You must terminate the block with '--' (two minus-signs) alone on the
3061 You must terminate the block with '--' (two minus-signs) alone on the
3062 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
3062 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
3063 is the new sentinel for this operation)
3063 is the new sentinel for this operation)
3064
3064
3065 The block is dedented prior to execution to enable execution of
3065 The block is dedented prior to execution to enable execution of
3066 method definitions. '>' characters at the beginning of a line is
3066 method definitions. '>' characters at the beginning of a line is
3067 ignored, to allow pasting directly from e-mails. The executed block
3067 ignored, to allow pasting directly from e-mails. The executed block
3068 is also assigned to variable named 'pasted_block' for later editing
3068 is also assigned to variable named 'pasted_block' for later editing
3069 with '%edit pasted_block'.
3069 with '%edit pasted_block'.
3070
3070
3071 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
3071 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
3072 This assigns the pasted block to variable 'foo' as string, without
3072 This assigns the pasted block to variable 'foo' as string, without
3073 dedenting or executing it.
3073 dedenting or executing it.
3074
3074
3075 Do not be alarmed by garbled output on Windows (it's a readline bug).
3075 Do not be alarmed by garbled output on Windows (it's a readline bug).
3076 Just press enter and type -- (and press enter again) and the block
3076 Just press enter and type -- (and press enter again) and the block
3077 will be what was just pasted.
3077 will be what was just pasted.
3078
3078
3079 IPython statements (magics, shell escapes) are not supported (yet).
3079 IPython statements (magics, shell escapes) are not supported (yet).
3080 """
3080 """
3081 opts,args = self.parse_options(parameter_s,'s:',mode='string')
3081 opts,args = self.parse_options(parameter_s,'s:',mode='string')
3082 par = args.strip()
3082 par = args.strip()
3083 sentinel = opts.get('s','--')
3083 sentinel = opts.get('s','--')
3084
3084
3085 from IPython import iplib
3085 from IPython import iplib
3086 lines = []
3086 lines = []
3087 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3087 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3088 while 1:
3088 while 1:
3089 l = iplib.raw_input_original(':')
3089 l = iplib.raw_input_original(':')
3090 if l ==sentinel:
3090 if l ==sentinel:
3091 break
3091 break
3092 lines.append(l.lstrip('>'))
3092 lines.append(l.lstrip('>'))
3093 block = "\n".join(lines) + '\n'
3093 block = "\n".join(lines) + '\n'
3094 #print "block:\n",block
3094 #print "block:\n",block
3095 if not par:
3095 if not par:
3096 b = textwrap.dedent(block)
3096 b = textwrap.dedent(block)
3097 exec b in self.user_ns
3097 exec b in self.user_ns
3098 self.user_ns['pasted_block'] = b
3098 self.user_ns['pasted_block'] = b
3099 else:
3099 else:
3100 self.user_ns[par] = block
3100 self.user_ns[par] = block
3101 print "Block assigned to '%s'" % par
3101 print "Block assigned to '%s'" % par
3102
3102
3103 def magic_quickref(self,arg):
3103 def magic_quickref(self,arg):
3104 """ Show a quick reference sheet """
3104 """ Show a quick reference sheet """
3105 import IPython.usage
3105 import IPython.usage
3106 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
3106 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
3107
3107
3108 page(qr)
3108 page(qr)
3109
3109
3110 def magic_upgrade(self,arg):
3110 def magic_upgrade(self,arg):
3111 """ Upgrade your IPython installation
3111 """ Upgrade your IPython installation
3112
3112
3113 This will copy the config files that don't yet exist in your
3113 This will copy the config files that don't yet exist in your
3114 ipython dir from the system config dir. Use this after upgrading
3114 ipython dir from the system config dir. Use this after upgrading
3115 IPython if you don't wish to delete your .ipython dir.
3115 IPython if you don't wish to delete your .ipython dir.
3116
3116
3117 Call with -nolegacy to get rid of ipythonrc* files (recommended for
3117 Call with -nolegacy to get rid of ipythonrc* files (recommended for
3118 new users)
3118 new users)
3119
3119
3120 """
3120 """
3121 ip = self.getapi()
3121 ip = self.getapi()
3122 ipinstallation = path(IPython.__file__).dirname()
3122 ipinstallation = path(IPython.__file__).dirname()
3123 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
3123 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
3124 src_config = ipinstallation / 'UserConfig'
3124 src_config = ipinstallation / 'UserConfig'
3125 userdir = path(ip.options.ipythondir)
3125 userdir = path(ip.options.ipythondir)
3126 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3126 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3127 print ">",cmd
3127 print ">",cmd
3128 shell(cmd)
3128 shell(cmd)
3129 if arg == '-nolegacy':
3129 if arg == '-nolegacy':
3130 legacy = userdir.files('ipythonrc*')
3130 legacy = userdir.files('ipythonrc*')
3131 print "Nuking legacy files:",legacy
3131 print "Nuking legacy files:",legacy
3132
3132
3133 [p.remove() for p in legacy]
3133 [p.remove() for p in legacy]
3134 suffix = (sys.platform == 'win32' and '.ini' or '')
3134 suffix = (sys.platform == 'win32' and '.ini' or '')
3135 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3135 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3136
3136
3137 # end Magic
3137 # end Magic
@@ -1,2634 +1,2631 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 Requires Python 2.3 or newer.
5 Requires Python 2.3 or newer.
6
6
7 This file contains all the classes and helper functions specific to IPython.
7 This file contains all the classes and helper functions specific to IPython.
8
8
9 $Id: iplib.py 2341 2007-05-15 14:44:30Z vivainio $
9 $Id: iplib.py 2344 2007-05-15 15:09:39Z vivainio $
10 """
10 """
11
11
12 #*****************************************************************************
12 #*****************************************************************************
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
15 #
15 #
16 # Distributed under the terms of the BSD License. The full license is in
16 # Distributed under the terms of the BSD License. The full license is in
17 # the file COPYING, distributed as part of this software.
17 # the file COPYING, distributed as part of this software.
18 #
18 #
19 # Note: this code originally subclassed code.InteractiveConsole from the
19 # Note: this code originally subclassed code.InteractiveConsole from the
20 # Python standard library. Over time, all of that class has been copied
20 # Python standard library. Over time, all of that class has been copied
21 # verbatim here for modifications which could not be accomplished by
21 # verbatim here for modifications which could not be accomplished by
22 # subclassing. At this point, there are no dependencies at all on the code
22 # subclassing. At this point, there are no dependencies at all on the code
23 # module anymore (it is not even imported). The Python License (sec. 2)
23 # module anymore (it is not even imported). The Python License (sec. 2)
24 # allows for this, but it's always nice to acknowledge credit where credit is
24 # allows for this, but it's always nice to acknowledge credit where credit is
25 # due.
25 # due.
26 #*****************************************************************************
26 #*****************************************************************************
27
27
28 #****************************************************************************
28 #****************************************************************************
29 # Modules and globals
29 # Modules and globals
30
30
31 from IPython import Release
31 from IPython import Release
32 __author__ = '%s <%s>\n%s <%s>' % \
32 __author__ = '%s <%s>\n%s <%s>' % \
33 ( Release.authors['Janko'] + Release.authors['Fernando'] )
33 ( Release.authors['Janko'] + Release.authors['Fernando'] )
34 __license__ = Release.license
34 __license__ = Release.license
35 __version__ = Release.version
35 __version__ = Release.version
36
36
37 # Python standard modules
37 # Python standard modules
38 import __main__
38 import __main__
39 import __builtin__
39 import __builtin__
40 import StringIO
40 import StringIO
41 import bdb
41 import bdb
42 import cPickle as pickle
42 import cPickle as pickle
43 import codeop
43 import codeop
44 import exceptions
44 import exceptions
45 import glob
45 import glob
46 import inspect
46 import inspect
47 import keyword
47 import keyword
48 import new
48 import new
49 import os
49 import os
50 import pydoc
50 import pydoc
51 import re
51 import re
52 import shutil
52 import shutil
53 import string
53 import string
54 import sys
54 import sys
55 import tempfile
55 import tempfile
56 import traceback
56 import traceback
57 import types
57 import types
58 import pickleshare
58 import pickleshare
59 from sets import Set
59 from sets import Set
60 from pprint import pprint, pformat
60 from pprint import pprint, pformat
61
61
62 # IPython's own modules
62 # IPython's own modules
63 import IPython
63 import IPython
64 from IPython import Debugger,OInspect,PyColorize,ultraTB
64 from IPython import Debugger,OInspect,PyColorize,ultraTB
65 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
65 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
66 from IPython.FakeModule import FakeModule
66 from IPython.FakeModule import FakeModule
67 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
67 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
68 from IPython.Logger import Logger
68 from IPython.Logger import Logger
69 from IPython.Magic import Magic
69 from IPython.Magic import Magic
70 from IPython.Prompts import CachedOutput
70 from IPython.Prompts import CachedOutput
71 from IPython.ipstruct import Struct
71 from IPython.ipstruct import Struct
72 from IPython.background_jobs import BackgroundJobManager
72 from IPython.background_jobs import BackgroundJobManager
73 from IPython.usage import cmd_line_usage,interactive_usage
73 from IPython.usage import cmd_line_usage,interactive_usage
74 from IPython.genutils import *
74 from IPython.genutils import *
75 from IPython.strdispatch import StrDispatch
75 from IPython.strdispatch import StrDispatch
76 import IPython.ipapi
76 import IPython.ipapi
77
77
78 # Globals
78 # Globals
79
79
80 # store the builtin raw_input globally, and use this always, in case user code
80 # store the builtin raw_input globally, and use this always, in case user code
81 # overwrites it (like wx.py.PyShell does)
81 # overwrites it (like wx.py.PyShell does)
82 raw_input_original = raw_input
82 raw_input_original = raw_input
83
83
84 # compiled regexps for autoindent management
84 # compiled regexps for autoindent management
85 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
85 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86
86
87
87
88 #****************************************************************************
88 #****************************************************************************
89 # Some utility function definitions
89 # Some utility function definitions
90
90
91 ini_spaces_re = re.compile(r'^(\s+)')
91 ini_spaces_re = re.compile(r'^(\s+)')
92
92
93 def num_ini_spaces(strng):
93 def num_ini_spaces(strng):
94 """Return the number of initial spaces in a string"""
94 """Return the number of initial spaces in a string"""
95
95
96 ini_spaces = ini_spaces_re.match(strng)
96 ini_spaces = ini_spaces_re.match(strng)
97 if ini_spaces:
97 if ini_spaces:
98 return ini_spaces.end()
98 return ini_spaces.end()
99 else:
99 else:
100 return 0
100 return 0
101
101
102 def softspace(file, newvalue):
102 def softspace(file, newvalue):
103 """Copied from code.py, to remove the dependency"""
103 """Copied from code.py, to remove the dependency"""
104
104
105 oldvalue = 0
105 oldvalue = 0
106 try:
106 try:
107 oldvalue = file.softspace
107 oldvalue = file.softspace
108 except AttributeError:
108 except AttributeError:
109 pass
109 pass
110 try:
110 try:
111 file.softspace = newvalue
111 file.softspace = newvalue
112 except (AttributeError, TypeError):
112 except (AttributeError, TypeError):
113 # "attribute-less object" or "read-only attributes"
113 # "attribute-less object" or "read-only attributes"
114 pass
114 pass
115 return oldvalue
115 return oldvalue
116
116
117
117
118 #****************************************************************************
118 #****************************************************************************
119 # Local use exceptions
119 # Local use exceptions
120 class SpaceInInput(exceptions.Exception): pass
120 class SpaceInInput(exceptions.Exception): pass
121
121
122
122
123 #****************************************************************************
123 #****************************************************************************
124 # Local use classes
124 # Local use classes
125 class Bunch: pass
125 class Bunch: pass
126
126
127 class Undefined: pass
127 class Undefined: pass
128
128
129 class Quitter(object):
129 class Quitter(object):
130 """Simple class to handle exit, similar to Python 2.5's.
130 """Simple class to handle exit, similar to Python 2.5's.
131
131
132 It handles exiting in an ipython-safe manner, which the one in Python 2.5
132 It handles exiting in an ipython-safe manner, which the one in Python 2.5
133 doesn't do (obviously, since it doesn't know about ipython)."""
133 doesn't do (obviously, since it doesn't know about ipython)."""
134
134
135 def __init__(self,shell,name):
135 def __init__(self,shell,name):
136 self.shell = shell
136 self.shell = shell
137 self.name = name
137 self.name = name
138
138
139 def __repr__(self):
139 def __repr__(self):
140 return 'Type %s() to exit.' % self.name
140 return 'Type %s() to exit.' % self.name
141 __str__ = __repr__
141 __str__ = __repr__
142
142
143 def __call__(self):
143 def __call__(self):
144 self.shell.exit()
144 self.shell.exit()
145
145
146 class InputList(list):
146 class InputList(list):
147 """Class to store user input.
147 """Class to store user input.
148
148
149 It's basically a list, but slices return a string instead of a list, thus
149 It's basically a list, but slices return a string instead of a list, thus
150 allowing things like (assuming 'In' is an instance):
150 allowing things like (assuming 'In' is an instance):
151
151
152 exec In[4:7]
152 exec In[4:7]
153
153
154 or
154 or
155
155
156 exec In[5:9] + In[14] + In[21:25]"""
156 exec In[5:9] + In[14] + In[21:25]"""
157
157
158 def __getslice__(self,i,j):
158 def __getslice__(self,i,j):
159 return ''.join(list.__getslice__(self,i,j))
159 return ''.join(list.__getslice__(self,i,j))
160
160
161 class SyntaxTB(ultraTB.ListTB):
161 class SyntaxTB(ultraTB.ListTB):
162 """Extension which holds some state: the last exception value"""
162 """Extension which holds some state: the last exception value"""
163
163
164 def __init__(self,color_scheme = 'NoColor'):
164 def __init__(self,color_scheme = 'NoColor'):
165 ultraTB.ListTB.__init__(self,color_scheme)
165 ultraTB.ListTB.__init__(self,color_scheme)
166 self.last_syntax_error = None
166 self.last_syntax_error = None
167
167
168 def __call__(self, etype, value, elist):
168 def __call__(self, etype, value, elist):
169 self.last_syntax_error = value
169 self.last_syntax_error = value
170 ultraTB.ListTB.__call__(self,etype,value,elist)
170 ultraTB.ListTB.__call__(self,etype,value,elist)
171
171
172 def clear_err_state(self):
172 def clear_err_state(self):
173 """Return the current error state and clear it"""
173 """Return the current error state and clear it"""
174 e = self.last_syntax_error
174 e = self.last_syntax_error
175 self.last_syntax_error = None
175 self.last_syntax_error = None
176 return e
176 return e
177
177
178 #****************************************************************************
178 #****************************************************************************
179 # Main IPython class
179 # Main IPython class
180
180
181 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
181 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
182 # until a full rewrite is made. I've cleaned all cross-class uses of
182 # until a full rewrite is made. I've cleaned all cross-class uses of
183 # attributes and methods, but too much user code out there relies on the
183 # attributes and methods, but too much user code out there relies on the
184 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
184 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
185 #
185 #
186 # But at least now, all the pieces have been separated and we could, in
186 # But at least now, all the pieces have been separated and we could, in
187 # principle, stop using the mixin. This will ease the transition to the
187 # principle, stop using the mixin. This will ease the transition to the
188 # chainsaw branch.
188 # chainsaw branch.
189
189
190 # For reference, the following is the list of 'self.foo' uses in the Magic
190 # For reference, the following is the list of 'self.foo' uses in the Magic
191 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
191 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
192 # class, to prevent clashes.
192 # class, to prevent clashes.
193
193
194 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
194 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
195 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
195 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
196 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
196 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
197 # 'self.value']
197 # 'self.value']
198
198
199 class InteractiveShell(object,Magic):
199 class InteractiveShell(object,Magic):
200 """An enhanced console for Python."""
200 """An enhanced console for Python."""
201
201
202 # class attribute to indicate whether the class supports threads or not.
202 # class attribute to indicate whether the class supports threads or not.
203 # Subclasses with thread support should override this as needed.
203 # Subclasses with thread support should override this as needed.
204 isthreaded = False
204 isthreaded = False
205
205
206 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
206 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
207 user_ns = None,user_global_ns=None,banner2='',
207 user_ns = None,user_global_ns=None,banner2='',
208 custom_exceptions=((),None),embedded=False):
208 custom_exceptions=((),None),embedded=False):
209
209
210 # log system
210 # log system
211 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
211 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
212
212
213 # some minimal strict typechecks. For some core data structures, I
213 # some minimal strict typechecks. For some core data structures, I
214 # want actual basic python types, not just anything that looks like
214 # want actual basic python types, not just anything that looks like
215 # one. This is especially true for namespaces.
215 # one. This is especially true for namespaces.
216 for ns in (user_ns,user_global_ns):
216 for ns in (user_ns,user_global_ns):
217 if ns is not None and type(ns) != types.DictType:
217 if ns is not None and type(ns) != types.DictType:
218 raise TypeError,'namespace must be a dictionary'
218 raise TypeError,'namespace must be a dictionary'
219
219
220 # Job manager (for jobs run as background threads)
220 # Job manager (for jobs run as background threads)
221 self.jobs = BackgroundJobManager()
221 self.jobs = BackgroundJobManager()
222
222
223 # Store the actual shell's name
223 # Store the actual shell's name
224 self.name = name
224 self.name = name
225
225
226 # We need to know whether the instance is meant for embedding, since
226 # We need to know whether the instance is meant for embedding, since
227 # global/local namespaces need to be handled differently in that case
227 # global/local namespaces need to be handled differently in that case
228 self.embedded = embedded
228 self.embedded = embedded
229
229
230 # command compiler
230 # command compiler
231 self.compile = codeop.CommandCompiler()
231 self.compile = codeop.CommandCompiler()
232
232
233 # User input buffer
233 # User input buffer
234 self.buffer = []
234 self.buffer = []
235
235
236 # Default name given in compilation of code
236 # Default name given in compilation of code
237 self.filename = '<ipython console>'
237 self.filename = '<ipython console>'
238
238
239 # Install our own quitter instead of the builtins. For python2.3-2.4,
239 # Install our own quitter instead of the builtins. For python2.3-2.4,
240 # this brings in behavior like 2.5, and for 2.5 it's identical.
240 # this brings in behavior like 2.5, and for 2.5 it's identical.
241 __builtin__.exit = Quitter(self,'exit')
241 __builtin__.exit = Quitter(self,'exit')
242 __builtin__.quit = Quitter(self,'quit')
242 __builtin__.quit = Quitter(self,'quit')
243
243
244 # Make an empty namespace, which extension writers can rely on both
244 # Make an empty namespace, which extension writers can rely on both
245 # existing and NEVER being used by ipython itself. This gives them a
245 # existing and NEVER being used by ipython itself. This gives them a
246 # convenient location for storing additional information and state
246 # convenient location for storing additional information and state
247 # their extensions may require, without fear of collisions with other
247 # their extensions may require, without fear of collisions with other
248 # ipython names that may develop later.
248 # ipython names that may develop later.
249 self.meta = Struct()
249 self.meta = Struct()
250
250
251 # Create the namespace where the user will operate. user_ns is
251 # Create the namespace where the user will operate. user_ns is
252 # normally the only one used, and it is passed to the exec calls as
252 # normally the only one used, and it is passed to the exec calls as
253 # the locals argument. But we do carry a user_global_ns namespace
253 # the locals argument. But we do carry a user_global_ns namespace
254 # given as the exec 'globals' argument, This is useful in embedding
254 # given as the exec 'globals' argument, This is useful in embedding
255 # situations where the ipython shell opens in a context where the
255 # situations where the ipython shell opens in a context where the
256 # distinction between locals and globals is meaningful.
256 # distinction between locals and globals is meaningful.
257
257
258 # FIXME. For some strange reason, __builtins__ is showing up at user
258 # FIXME. For some strange reason, __builtins__ is showing up at user
259 # level as a dict instead of a module. This is a manual fix, but I
259 # level as a dict instead of a module. This is a manual fix, but I
260 # should really track down where the problem is coming from. Alex
260 # should really track down where the problem is coming from. Alex
261 # Schmolck reported this problem first.
261 # Schmolck reported this problem first.
262
262
263 # A useful post by Alex Martelli on this topic:
263 # A useful post by Alex Martelli on this topic:
264 # Re: inconsistent value from __builtins__
264 # Re: inconsistent value from __builtins__
265 # Von: Alex Martelli <aleaxit@yahoo.com>
265 # Von: Alex Martelli <aleaxit@yahoo.com>
266 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
266 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
267 # Gruppen: comp.lang.python
267 # Gruppen: comp.lang.python
268
268
269 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
269 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
270 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
270 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
271 # > <type 'dict'>
271 # > <type 'dict'>
272 # > >>> print type(__builtins__)
272 # > >>> print type(__builtins__)
273 # > <type 'module'>
273 # > <type 'module'>
274 # > Is this difference in return value intentional?
274 # > Is this difference in return value intentional?
275
275
276 # Well, it's documented that '__builtins__' can be either a dictionary
276 # Well, it's documented that '__builtins__' can be either a dictionary
277 # or a module, and it's been that way for a long time. Whether it's
277 # or a module, and it's been that way for a long time. Whether it's
278 # intentional (or sensible), I don't know. In any case, the idea is
278 # intentional (or sensible), I don't know. In any case, the idea is
279 # that if you need to access the built-in namespace directly, you
279 # that if you need to access the built-in namespace directly, you
280 # should start with "import __builtin__" (note, no 's') which will
280 # should start with "import __builtin__" (note, no 's') which will
281 # definitely give you a module. Yeah, it's somewhat confusing:-(.
281 # definitely give you a module. Yeah, it's somewhat confusing:-(.
282
282
283 # These routines return properly built dicts as needed by the rest of
283 # These routines return properly built dicts as needed by the rest of
284 # the code, and can also be used by extension writers to generate
284 # the code, and can also be used by extension writers to generate
285 # properly initialized namespaces.
285 # properly initialized namespaces.
286 user_ns = IPython.ipapi.make_user_ns(user_ns)
286 user_ns = IPython.ipapi.make_user_ns(user_ns)
287 user_global_ns = IPython.ipapi.make_user_global_ns(user_global_ns)
287 user_global_ns = IPython.ipapi.make_user_global_ns(user_global_ns)
288
288
289 # Assign namespaces
289 # Assign namespaces
290 # This is the namespace where all normal user variables live
290 # This is the namespace where all normal user variables live
291 self.user_ns = user_ns
291 self.user_ns = user_ns
292 # Embedded instances require a separate namespace for globals.
292 # Embedded instances require a separate namespace for globals.
293 # Normally this one is unused by non-embedded instances.
293 # Normally this one is unused by non-embedded instances.
294 self.user_global_ns = user_global_ns
294 self.user_global_ns = user_global_ns
295 # A namespace to keep track of internal data structures to prevent
295 # A namespace to keep track of internal data structures to prevent
296 # them from cluttering user-visible stuff. Will be updated later
296 # them from cluttering user-visible stuff. Will be updated later
297 self.internal_ns = {}
297 self.internal_ns = {}
298
298
299 # Namespace of system aliases. Each entry in the alias
299 # Namespace of system aliases. Each entry in the alias
300 # table must be a 2-tuple of the form (N,name), where N is the number
300 # table must be a 2-tuple of the form (N,name), where N is the number
301 # of positional arguments of the alias.
301 # of positional arguments of the alias.
302 self.alias_table = {}
302 self.alias_table = {}
303
303
304 # A table holding all the namespaces IPython deals with, so that
304 # A table holding all the namespaces IPython deals with, so that
305 # introspection facilities can search easily.
305 # introspection facilities can search easily.
306 self.ns_table = {'user':user_ns,
306 self.ns_table = {'user':user_ns,
307 'user_global':user_global_ns,
307 'user_global':user_global_ns,
308 'alias':self.alias_table,
308 'alias':self.alias_table,
309 'internal':self.internal_ns,
309 'internal':self.internal_ns,
310 'builtin':__builtin__.__dict__
310 'builtin':__builtin__.__dict__
311 }
311 }
312
312
313 # The user namespace MUST have a pointer to the shell itself.
313 # The user namespace MUST have a pointer to the shell itself.
314 self.user_ns[name] = self
314 self.user_ns[name] = self
315
315
316 # We need to insert into sys.modules something that looks like a
316 # We need to insert into sys.modules something that looks like a
317 # module but which accesses the IPython namespace, for shelve and
317 # module but which accesses the IPython namespace, for shelve and
318 # pickle to work interactively. Normally they rely on getting
318 # pickle to work interactively. Normally they rely on getting
319 # everything out of __main__, but for embedding purposes each IPython
319 # everything out of __main__, but for embedding purposes each IPython
320 # instance has its own private namespace, so we can't go shoving
320 # instance has its own private namespace, so we can't go shoving
321 # everything into __main__.
321 # everything into __main__.
322
322
323 # note, however, that we should only do this for non-embedded
323 # note, however, that we should only do this for non-embedded
324 # ipythons, which really mimic the __main__.__dict__ with their own
324 # ipythons, which really mimic the __main__.__dict__ with their own
325 # namespace. Embedded instances, on the other hand, should not do
325 # namespace. Embedded instances, on the other hand, should not do
326 # this because they need to manage the user local/global namespaces
326 # this because they need to manage the user local/global namespaces
327 # only, but they live within a 'normal' __main__ (meaning, they
327 # only, but they live within a 'normal' __main__ (meaning, they
328 # shouldn't overtake the execution environment of the script they're
328 # shouldn't overtake the execution environment of the script they're
329 # embedded in).
329 # embedded in).
330
330
331 if not embedded:
331 if not embedded:
332 try:
332 try:
333 main_name = self.user_ns['__name__']
333 main_name = self.user_ns['__name__']
334 except KeyError:
334 except KeyError:
335 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
335 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
336 else:
336 else:
337 #print "pickle hack in place" # dbg
337 #print "pickle hack in place" # dbg
338 #print 'main_name:',main_name # dbg
338 #print 'main_name:',main_name # dbg
339 sys.modules[main_name] = FakeModule(self.user_ns)
339 sys.modules[main_name] = FakeModule(self.user_ns)
340
340
341 # List of input with multi-line handling.
341 # List of input with multi-line handling.
342 # Fill its zero entry, user counter starts at 1
342 # Fill its zero entry, user counter starts at 1
343 self.input_hist = InputList(['\n'])
343 self.input_hist = InputList(['\n'])
344 # This one will hold the 'raw' input history, without any
344 # This one will hold the 'raw' input history, without any
345 # pre-processing. This will allow users to retrieve the input just as
345 # pre-processing. This will allow users to retrieve the input just as
346 # it was exactly typed in by the user, with %hist -r.
346 # it was exactly typed in by the user, with %hist -r.
347 self.input_hist_raw = InputList(['\n'])
347 self.input_hist_raw = InputList(['\n'])
348
348
349 # list of visited directories
349 # list of visited directories
350 try:
350 try:
351 self.dir_hist = [os.getcwd()]
351 self.dir_hist = [os.getcwd()]
352 except IOError, e:
352 except IOError, e:
353 self.dir_hist = []
353 self.dir_hist = []
354
354
355 # dict of output history
355 # dict of output history
356 self.output_hist = {}
356 self.output_hist = {}
357
357
358 # Get system encoding at startup time. Certain terminals (like Emacs
358 # Get system encoding at startup time. Certain terminals (like Emacs
359 # under Win32 have it set to None, and we need to have a known valid
359 # under Win32 have it set to None, and we need to have a known valid
360 # encoding to use in the raw_input() method
360 # encoding to use in the raw_input() method
361 self.stdin_encoding = sys.stdin.encoding or 'ascii'
361 self.stdin_encoding = sys.stdin.encoding or 'ascii'
362
362
363 # dict of things NOT to alias (keywords, builtins and some magics)
363 # dict of things NOT to alias (keywords, builtins and some magics)
364 no_alias = {}
364 no_alias = {}
365 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
365 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
366 for key in keyword.kwlist + no_alias_magics:
366 for key in keyword.kwlist + no_alias_magics:
367 no_alias[key] = 1
367 no_alias[key] = 1
368 no_alias.update(__builtin__.__dict__)
368 no_alias.update(__builtin__.__dict__)
369 self.no_alias = no_alias
369 self.no_alias = no_alias
370
370
371 # make global variables for user access to these
371 # make global variables for user access to these
372 self.user_ns['_ih'] = self.input_hist
372 self.user_ns['_ih'] = self.input_hist
373 self.user_ns['_oh'] = self.output_hist
373 self.user_ns['_oh'] = self.output_hist
374 self.user_ns['_dh'] = self.dir_hist
374 self.user_ns['_dh'] = self.dir_hist
375
375
376 # user aliases to input and output histories
376 # user aliases to input and output histories
377 self.user_ns['In'] = self.input_hist
377 self.user_ns['In'] = self.input_hist
378 self.user_ns['Out'] = self.output_hist
378 self.user_ns['Out'] = self.output_hist
379
379
380 # Object variable to store code object waiting execution. This is
380 # Object variable to store code object waiting execution. This is
381 # used mainly by the multithreaded shells, but it can come in handy in
381 # used mainly by the multithreaded shells, but it can come in handy in
382 # other situations. No need to use a Queue here, since it's a single
382 # other situations. No need to use a Queue here, since it's a single
383 # item which gets cleared once run.
383 # item which gets cleared once run.
384 self.code_to_run = None
384 self.code_to_run = None
385
385
386 # escapes for automatic behavior on the command line
386 # escapes for automatic behavior on the command line
387 self.ESC_SHELL = '!'
387 self.ESC_SHELL = '!'
388 self.ESC_HELP = '?'
388 self.ESC_HELP = '?'
389 self.ESC_MAGIC = '%'
389 self.ESC_MAGIC = '%'
390 self.ESC_QUOTE = ','
390 self.ESC_QUOTE = ','
391 self.ESC_QUOTE2 = ';'
391 self.ESC_QUOTE2 = ';'
392 self.ESC_PAREN = '/'
392 self.ESC_PAREN = '/'
393
393
394 # And their associated handlers
394 # And their associated handlers
395 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
395 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
396 self.ESC_QUOTE : self.handle_auto,
396 self.ESC_QUOTE : self.handle_auto,
397 self.ESC_QUOTE2 : self.handle_auto,
397 self.ESC_QUOTE2 : self.handle_auto,
398 self.ESC_MAGIC : self.handle_magic,
398 self.ESC_MAGIC : self.handle_magic,
399 self.ESC_HELP : self.handle_help,
399 self.ESC_HELP : self.handle_help,
400 self.ESC_SHELL : self.handle_shell_escape,
400 self.ESC_SHELL : self.handle_shell_escape,
401 }
401 }
402
402
403 # class initializations
403 # class initializations
404 Magic.__init__(self,self)
404 Magic.__init__(self,self)
405
405
406 # Python source parser/formatter for syntax highlighting
406 # Python source parser/formatter for syntax highlighting
407 pyformat = PyColorize.Parser().format
407 pyformat = PyColorize.Parser().format
408 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
408 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
409
409
410 # hooks holds pointers used for user-side customizations
410 # hooks holds pointers used for user-side customizations
411 self.hooks = Struct()
411 self.hooks = Struct()
412
412
413 self.strdispatchers = {}
413 self.strdispatchers = {}
414
414
415 # Set all default hooks, defined in the IPython.hooks module.
415 # Set all default hooks, defined in the IPython.hooks module.
416 hooks = IPython.hooks
416 hooks = IPython.hooks
417 for hook_name in hooks.__all__:
417 for hook_name in hooks.__all__:
418 # default hooks have priority 100, i.e. low; user hooks should have
418 # default hooks have priority 100, i.e. low; user hooks should have
419 # 0-100 priority
419 # 0-100 priority
420 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
420 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
421 #print "bound hook",hook_name
421 #print "bound hook",hook_name
422
422
423 # Flag to mark unconditional exit
423 # Flag to mark unconditional exit
424 self.exit_now = False
424 self.exit_now = False
425
425
426 self.usage_min = """\
426 self.usage_min = """\
427 An enhanced console for Python.
427 An enhanced console for Python.
428 Some of its features are:
428 Some of its features are:
429 - Readline support if the readline library is present.
429 - Readline support if the readline library is present.
430 - Tab completion in the local namespace.
430 - Tab completion in the local namespace.
431 - Logging of input, see command-line options.
431 - Logging of input, see command-line options.
432 - System shell escape via ! , eg !ls.
432 - System shell escape via ! , eg !ls.
433 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
433 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
434 - Keeps track of locally defined variables via %who, %whos.
434 - Keeps track of locally defined variables via %who, %whos.
435 - Show object information with a ? eg ?x or x? (use ?? for more info).
435 - Show object information with a ? eg ?x or x? (use ?? for more info).
436 """
436 """
437 if usage: self.usage = usage
437 if usage: self.usage = usage
438 else: self.usage = self.usage_min
438 else: self.usage = self.usage_min
439
439
440 # Storage
440 # Storage
441 self.rc = rc # This will hold all configuration information
441 self.rc = rc # This will hold all configuration information
442 self.pager = 'less'
442 self.pager = 'less'
443 # temporary files used for various purposes. Deleted at exit.
443 # temporary files used for various purposes. Deleted at exit.
444 self.tempfiles = []
444 self.tempfiles = []
445
445
446 # Keep track of readline usage (later set by init_readline)
446 # Keep track of readline usage (later set by init_readline)
447 self.has_readline = False
447 self.has_readline = False
448
448
449 # template for logfile headers. It gets resolved at runtime by the
449 # template for logfile headers. It gets resolved at runtime by the
450 # logstart method.
450 # logstart method.
451 self.loghead_tpl = \
451 self.loghead_tpl = \
452 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
452 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
453 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
453 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
454 #log# opts = %s
454 #log# opts = %s
455 #log# args = %s
455 #log# args = %s
456 #log# It is safe to make manual edits below here.
456 #log# It is safe to make manual edits below here.
457 #log#-----------------------------------------------------------------------
457 #log#-----------------------------------------------------------------------
458 """
458 """
459 # for pushd/popd management
459 # for pushd/popd management
460 try:
460 try:
461 self.home_dir = get_home_dir()
461 self.home_dir = get_home_dir()
462 except HomeDirError,msg:
462 except HomeDirError,msg:
463 fatal(msg)
463 fatal(msg)
464
464
465 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
465 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
466
466
467 # Functions to call the underlying shell.
467 # Functions to call the underlying shell.
468
468
469 # The first is similar to os.system, but it doesn't return a value,
469 # The first is similar to os.system, but it doesn't return a value,
470 # and it allows interpolation of variables in the user's namespace.
470 # and it allows interpolation of variables in the user's namespace.
471 self.system = lambda cmd: \
471 self.system = lambda cmd: \
472 shell(self.var_expand(cmd,depth=2),
472 shell(self.var_expand(cmd,depth=2),
473 header=self.rc.system_header,
473 header=self.rc.system_header,
474 verbose=self.rc.system_verbose)
474 verbose=self.rc.system_verbose)
475
475
476 # These are for getoutput and getoutputerror:
476 # These are for getoutput and getoutputerror:
477 self.getoutput = lambda cmd: \
477 self.getoutput = lambda cmd: \
478 getoutput(self.var_expand(cmd,depth=2),
478 getoutput(self.var_expand(cmd,depth=2),
479 header=self.rc.system_header,
479 header=self.rc.system_header,
480 verbose=self.rc.system_verbose)
480 verbose=self.rc.system_verbose)
481
481
482 self.getoutputerror = lambda cmd: \
482 self.getoutputerror = lambda cmd: \
483 getoutputerror(self.var_expand(cmd,depth=2),
483 getoutputerror(self.var_expand(cmd,depth=2),
484 header=self.rc.system_header,
484 header=self.rc.system_header,
485 verbose=self.rc.system_verbose)
485 verbose=self.rc.system_verbose)
486
486
487 # RegExp for splitting line contents into pre-char//first
487 # RegExp for splitting line contents into pre-char//first
488 # word-method//rest. For clarity, each group in on one line.
488 # word-method//rest. For clarity, each group in on one line.
489
489
490 # WARNING: update the regexp if the above escapes are changed, as they
490 # WARNING: update the regexp if the above escapes are changed, as they
491 # are hardwired in.
491 # are hardwired in.
492
492
493 # Don't get carried away with trying to make the autocalling catch too
493 # Don't get carried away with trying to make the autocalling catch too
494 # much: it's better to be conservative rather than to trigger hidden
494 # much: it's better to be conservative rather than to trigger hidden
495 # evals() somewhere and end up causing side effects.
495 # evals() somewhere and end up causing side effects.
496 self.line_split = re.compile(r'^(\s*[,;/]?\s*)'
496 self.line_split = re.compile(r'^(\s*[,;/]?\s*)'
497 r'([\?\w\.]+\w*\s*)'
497 r'([\?\w\.]+\w*\s*)'
498 r'(\(?.*$)')
498 r'(\(?.*$)')
499
499
500 self.shell_line_split = re.compile(r'^(\s*)'
500 self.shell_line_split = re.compile(r'^(\s*)'
501 r'(\S*\s*)'
501 r'(\S*\s*)'
502 r'(\(?.*$)')
502 r'(\(?.*$)')
503
503
504 # A simpler regexp used as a fallback if the above doesn't work. This
504 # A simpler regexp used as a fallback if the above doesn't work. This
505 # one is more conservative in how it partitions the input. This code
505 # one is more conservative in how it partitions the input. This code
506 # can probably be cleaned up to do everything with just one regexp, but
506 # can probably be cleaned up to do everything with just one regexp, but
507 # I'm afraid of breaking something; do it once the unit tests are in
507 # I'm afraid of breaking something; do it once the unit tests are in
508 # place.
508 # place.
509 self.line_split_fallback = re.compile(r'^(\s*)'
509 self.line_split_fallback = re.compile(r'^(\s*)'
510 r'([%\!\?\w\.]*)'
510 r'([%\!\?\w\.]*)'
511 r'(.*)')
511 r'(.*)')
512
512
513 # Original re, keep around for a while in case changes break something
513 # Original re, keep around for a while in case changes break something
514 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
514 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
515 # r'(\s*[\?\w\.]+\w*\s*)'
515 # r'(\s*[\?\w\.]+\w*\s*)'
516 # r'(\(?.*$)')
516 # r'(\(?.*$)')
517
517
518 # RegExp to identify potential function names
518 # RegExp to identify potential function names
519 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
519 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
520
520
521 # RegExp to exclude strings with this start from autocalling. In
521 # RegExp to exclude strings with this start from autocalling. In
522 # particular, all binary operators should be excluded, so that if foo
522 # particular, all binary operators should be excluded, so that if foo
523 # is callable, foo OP bar doesn't become foo(OP bar), which is
523 # is callable, foo OP bar doesn't become foo(OP bar), which is
524 # invalid. The characters '!=()' don't need to be checked for, as the
524 # invalid. The characters '!=()' don't need to be checked for, as the
525 # _prefilter routine explicitely does so, to catch direct calls and
525 # _prefilter routine explicitely does so, to catch direct calls and
526 # rebindings of existing names.
526 # rebindings of existing names.
527
527
528 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
528 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
529 # it affects the rest of the group in square brackets.
529 # it affects the rest of the group in square brackets.
530 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
530 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
531 '|^is |^not |^in |^and |^or ')
531 '|^is |^not |^in |^and |^or ')
532
532
533 # try to catch also methods for stuff in lists/tuples/dicts: off
533 # try to catch also methods for stuff in lists/tuples/dicts: off
534 # (experimental). For this to work, the line_split regexp would need
534 # (experimental). For this to work, the line_split regexp would need
535 # to be modified so it wouldn't break things at '['. That line is
535 # to be modified so it wouldn't break things at '['. That line is
536 # nasty enough that I shouldn't change it until I can test it _well_.
536 # nasty enough that I shouldn't change it until I can test it _well_.
537 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
537 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
538
538
539 # keep track of where we started running (mainly for crash post-mortem)
539 # keep track of where we started running (mainly for crash post-mortem)
540 self.starting_dir = os.getcwd()
540 self.starting_dir = os.getcwd()
541
541
542 # Various switches which can be set
542 # Various switches which can be set
543 self.CACHELENGTH = 5000 # this is cheap, it's just text
543 self.CACHELENGTH = 5000 # this is cheap, it's just text
544 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
544 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
545 self.banner2 = banner2
545 self.banner2 = banner2
546
546
547 # TraceBack handlers:
547 # TraceBack handlers:
548
548
549 # Syntax error handler.
549 # Syntax error handler.
550 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
550 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
551
551
552 # The interactive one is initialized with an offset, meaning we always
552 # The interactive one is initialized with an offset, meaning we always
553 # want to remove the topmost item in the traceback, which is our own
553 # want to remove the topmost item in the traceback, which is our own
554 # internal code. Valid modes: ['Plain','Context','Verbose']
554 # internal code. Valid modes: ['Plain','Context','Verbose']
555 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
555 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
556 color_scheme='NoColor',
556 color_scheme='NoColor',
557 tb_offset = 1)
557 tb_offset = 1)
558
558
559 # IPython itself shouldn't crash. This will produce a detailed
559 # IPython itself shouldn't crash. This will produce a detailed
560 # post-mortem if it does. But we only install the crash handler for
560 # post-mortem if it does. But we only install the crash handler for
561 # non-threaded shells, the threaded ones use a normal verbose reporter
561 # non-threaded shells, the threaded ones use a normal verbose reporter
562 # and lose the crash handler. This is because exceptions in the main
562 # and lose the crash handler. This is because exceptions in the main
563 # thread (such as in GUI code) propagate directly to sys.excepthook,
563 # thread (such as in GUI code) propagate directly to sys.excepthook,
564 # and there's no point in printing crash dumps for every user exception.
564 # and there's no point in printing crash dumps for every user exception.
565 if self.isthreaded:
565 if self.isthreaded:
566 ipCrashHandler = ultraTB.FormattedTB()
566 ipCrashHandler = ultraTB.FormattedTB()
567 else:
567 else:
568 from IPython import CrashHandler
568 from IPython import CrashHandler
569 ipCrashHandler = CrashHandler.IPythonCrashHandler(self)
569 ipCrashHandler = CrashHandler.IPythonCrashHandler(self)
570 self.set_crash_handler(ipCrashHandler)
570 self.set_crash_handler(ipCrashHandler)
571
571
572 # and add any custom exception handlers the user may have specified
572 # and add any custom exception handlers the user may have specified
573 self.set_custom_exc(*custom_exceptions)
573 self.set_custom_exc(*custom_exceptions)
574
574
575 # indentation management
575 # indentation management
576 self.autoindent = False
576 self.autoindent = False
577 self.indent_current_nsp = 0
577 self.indent_current_nsp = 0
578
578
579 # Make some aliases automatically
579 # Make some aliases automatically
580 # Prepare list of shell aliases to auto-define
580 # Prepare list of shell aliases to auto-define
581 if os.name == 'posix':
581 if os.name == 'posix':
582 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
582 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
583 'mv mv -i','rm rm -i','cp cp -i',
583 'mv mv -i','rm rm -i','cp cp -i',
584 'cat cat','less less','clear clear',
584 'cat cat','less less','clear clear',
585 # a better ls
585 # a better ls
586 'ls ls -F',
586 'ls ls -F',
587 # long ls
587 # long ls
588 'll ls -lF')
588 'll ls -lF')
589 # Extra ls aliases with color, which need special treatment on BSD
589 # Extra ls aliases with color, which need special treatment on BSD
590 # variants
590 # variants
591 ls_extra = ( # color ls
591 ls_extra = ( # color ls
592 'lc ls -F -o --color',
592 'lc ls -F -o --color',
593 # ls normal files only
593 # ls normal files only
594 'lf ls -F -o --color %l | grep ^-',
594 'lf ls -F -o --color %l | grep ^-',
595 # ls symbolic links
595 # ls symbolic links
596 'lk ls -F -o --color %l | grep ^l',
596 'lk ls -F -o --color %l | grep ^l',
597 # directories or links to directories,
597 # directories or links to directories,
598 'ldir ls -F -o --color %l | grep /$',
598 'ldir ls -F -o --color %l | grep /$',
599 # things which are executable
599 # things which are executable
600 'lx ls -F -o --color %l | grep ^-..x',
600 'lx ls -F -o --color %l | grep ^-..x',
601 )
601 )
602 # The BSDs don't ship GNU ls, so they don't understand the
602 # The BSDs don't ship GNU ls, so they don't understand the
603 # --color switch out of the box
603 # --color switch out of the box
604 if 'bsd' in sys.platform:
604 if 'bsd' in sys.platform:
605 ls_extra = ( # ls normal files only
605 ls_extra = ( # ls normal files only
606 'lf ls -lF | grep ^-',
606 'lf ls -lF | grep ^-',
607 # ls symbolic links
607 # ls symbolic links
608 'lk ls -lF | grep ^l',
608 'lk ls -lF | grep ^l',
609 # directories or links to directories,
609 # directories or links to directories,
610 'ldir ls -lF | grep /$',
610 'ldir ls -lF | grep /$',
611 # things which are executable
611 # things which are executable
612 'lx ls -lF | grep ^-..x',
612 'lx ls -lF | grep ^-..x',
613 )
613 )
614 auto_alias = auto_alias + ls_extra
614 auto_alias = auto_alias + ls_extra
615 elif os.name in ['nt','dos']:
615 elif os.name in ['nt','dos']:
616 auto_alias = ('dir dir /on', 'ls dir /on',
616 auto_alias = ('dir dir /on', 'ls dir /on',
617 'ddir dir /ad /on', 'ldir dir /ad /on',
617 'ddir dir /ad /on', 'ldir dir /ad /on',
618 'mkdir mkdir','rmdir rmdir','echo echo',
618 'mkdir mkdir','rmdir rmdir','echo echo',
619 'ren ren','cls cls','copy copy')
619 'ren ren','cls cls','copy copy')
620 else:
620 else:
621 auto_alias = ()
621 auto_alias = ()
622 self.auto_alias = [s.split(None,1) for s in auto_alias]
622 self.auto_alias = [s.split(None,1) for s in auto_alias]
623 # Call the actual (public) initializer
623 # Call the actual (public) initializer
624 self.init_auto_alias()
624 self.init_auto_alias()
625
625
626 # Produce a public API instance
626 # Produce a public API instance
627 self.api = IPython.ipapi.IPApi(self)
627 self.api = IPython.ipapi.IPApi(self)
628
628
629 # track which builtins we add, so we can clean up later
629 # track which builtins we add, so we can clean up later
630 self.builtins_added = {}
630 self.builtins_added = {}
631 # This method will add the necessary builtins for operation, but
631 # This method will add the necessary builtins for operation, but
632 # tracking what it did via the builtins_added dict.
632 # tracking what it did via the builtins_added dict.
633 self.add_builtins()
633 self.add_builtins()
634
634
635 # end __init__
635 # end __init__
636
636
637 def var_expand(self,cmd,depth=0):
637 def var_expand(self,cmd,depth=0):
638 """Expand python variables in a string.
638 """Expand python variables in a string.
639
639
640 The depth argument indicates how many frames above the caller should
640 The depth argument indicates how many frames above the caller should
641 be walked to look for the local namespace where to expand variables.
641 be walked to look for the local namespace where to expand variables.
642
642
643 The global namespace for expansion is always the user's interactive
643 The global namespace for expansion is always the user's interactive
644 namespace.
644 namespace.
645 """
645 """
646
646
647 return str(ItplNS(cmd.replace('#','\#'),
647 return str(ItplNS(cmd.replace('#','\#'),
648 self.user_ns, # globals
648 self.user_ns, # globals
649 # Skip our own frame in searching for locals:
649 # Skip our own frame in searching for locals:
650 sys._getframe(depth+1).f_locals # locals
650 sys._getframe(depth+1).f_locals # locals
651 ))
651 ))
652
652
653 def pre_config_initialization(self):
653 def pre_config_initialization(self):
654 """Pre-configuration init method
654 """Pre-configuration init method
655
655
656 This is called before the configuration files are processed to
656 This is called before the configuration files are processed to
657 prepare the services the config files might need.
657 prepare the services the config files might need.
658
658
659 self.rc already has reasonable default values at this point.
659 self.rc already has reasonable default values at this point.
660 """
660 """
661 rc = self.rc
661 rc = self.rc
662 try:
662 try:
663 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
663 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
664 except exceptions.UnicodeDecodeError:
664 except exceptions.UnicodeDecodeError:
665 print "Your ipythondir can't be decoded to unicode!"
665 print "Your ipythondir can't be decoded to unicode!"
666 print "Please set HOME environment variable to something that"
666 print "Please set HOME environment variable to something that"
667 print r"only has ASCII characters, e.g. c:\home"
667 print r"only has ASCII characters, e.g. c:\home"
668 print "Now it is",rc.ipythondir
668 print "Now it is",rc.ipythondir
669 sys.exit()
669 sys.exit()
670
670
671
671
672 def post_config_initialization(self):
672 def post_config_initialization(self):
673 """Post configuration init method
673 """Post configuration init method
674
674
675 This is called after the configuration files have been processed to
675 This is called after the configuration files have been processed to
676 'finalize' the initialization."""
676 'finalize' the initialization."""
677
677
678 rc = self.rc
678 rc = self.rc
679
679
680 # Object inspector
680 # Object inspector
681 self.inspector = OInspect.Inspector(OInspect.InspectColors,
681 self.inspector = OInspect.Inspector(OInspect.InspectColors,
682 PyColorize.ANSICodeColors,
682 PyColorize.ANSICodeColors,
683 'NoColor',
683 'NoColor',
684 rc.object_info_string_level)
684 rc.object_info_string_level)
685
685
686 # Load readline proper
686 # Load readline proper
687 if rc.readline:
687 if rc.readline:
688 self.init_readline()
688 self.init_readline()
689
689
690 # local shortcut, this is used a LOT
690 # local shortcut, this is used a LOT
691 self.log = self.logger.log
691 self.log = self.logger.log
692
692
693 # Initialize cache, set in/out prompts and printing system
693 # Initialize cache, set in/out prompts and printing system
694 self.outputcache = CachedOutput(self,
694 self.outputcache = CachedOutput(self,
695 rc.cache_size,
695 rc.cache_size,
696 rc.pprint,
696 rc.pprint,
697 input_sep = rc.separate_in,
697 input_sep = rc.separate_in,
698 output_sep = rc.separate_out,
698 output_sep = rc.separate_out,
699 output_sep2 = rc.separate_out2,
699 output_sep2 = rc.separate_out2,
700 ps1 = rc.prompt_in1,
700 ps1 = rc.prompt_in1,
701 ps2 = rc.prompt_in2,
701 ps2 = rc.prompt_in2,
702 ps_out = rc.prompt_out,
702 ps_out = rc.prompt_out,
703 pad_left = rc.prompts_pad_left)
703 pad_left = rc.prompts_pad_left)
704
704
705 # user may have over-ridden the default print hook:
705 # user may have over-ridden the default print hook:
706 try:
706 try:
707 self.outputcache.__class__.display = self.hooks.display
707 self.outputcache.__class__.display = self.hooks.display
708 except AttributeError:
708 except AttributeError:
709 pass
709 pass
710
710
711 # I don't like assigning globally to sys, because it means when
711 # I don't like assigning globally to sys, because it means when
712 # embedding instances, each embedded instance overrides the previous
712 # embedding instances, each embedded instance overrides the previous
713 # choice. But sys.displayhook seems to be called internally by exec,
713 # choice. But sys.displayhook seems to be called internally by exec,
714 # so I don't see a way around it. We first save the original and then
714 # so I don't see a way around it. We first save the original and then
715 # overwrite it.
715 # overwrite it.
716 self.sys_displayhook = sys.displayhook
716 self.sys_displayhook = sys.displayhook
717 sys.displayhook = self.outputcache
717 sys.displayhook = self.outputcache
718
718
719 # Set user colors (don't do it in the constructor above so that it
719 # Set user colors (don't do it in the constructor above so that it
720 # doesn't crash if colors option is invalid)
720 # doesn't crash if colors option is invalid)
721 self.magic_colors(rc.colors)
721 self.magic_colors(rc.colors)
722
722
723 # Set calling of pdb on exceptions
723 # Set calling of pdb on exceptions
724 self.call_pdb = rc.pdb
724 self.call_pdb = rc.pdb
725
725
726 # Load user aliases
726 # Load user aliases
727 for alias in rc.alias:
727 for alias in rc.alias:
728 self.magic_alias(alias)
728 self.magic_alias(alias)
729 self.hooks.late_startup_hook()
729 self.hooks.late_startup_hook()
730
730
731 batchrun = False
731 batchrun = False
732 for batchfile in [path(arg) for arg in self.rc.args
732 for batchfile in [path(arg) for arg in self.rc.args
733 if arg.lower().endswith('.ipy')]:
733 if arg.lower().endswith('.ipy')]:
734 if not batchfile.isfile():
734 if not batchfile.isfile():
735 print "No such batch file:", batchfile
735 print "No such batch file:", batchfile
736 continue
736 continue
737 self.api.runlines(batchfile.text())
737 self.api.runlines(batchfile.text())
738 batchrun = True
738 batchrun = True
739 if batchrun:
739 if batchrun:
740 self.exit_now = True
740 self.exit_now = True
741
741
742 def add_builtins(self):
742 def add_builtins(self):
743 """Store ipython references into the builtin namespace.
743 """Store ipython references into the builtin namespace.
744
744
745 Some parts of ipython operate via builtins injected here, which hold a
745 Some parts of ipython operate via builtins injected here, which hold a
746 reference to IPython itself."""
746 reference to IPython itself."""
747
747
748 # TODO: deprecate all except _ip; 'jobs' should be installed
748 # TODO: deprecate all except _ip; 'jobs' should be installed
749 # by an extension and the rest are under _ip, ipalias is redundant
749 # by an extension and the rest are under _ip, ipalias is redundant
750 builtins_new = dict(__IPYTHON__ = self,
750 builtins_new = dict(__IPYTHON__ = self,
751 ip_set_hook = self.set_hook,
751 ip_set_hook = self.set_hook,
752 jobs = self.jobs,
752 jobs = self.jobs,
753 ipmagic = wrap_deprecated(self.ipmagic,'_ip.magic()'),
753 ipmagic = wrap_deprecated(self.ipmagic,'_ip.magic()'),
754 ipalias = wrap_deprecated(self.ipalias),
754 ipalias = wrap_deprecated(self.ipalias),
755 ipsystem = wrap_deprecated(self.ipsystem,'_ip.system()'),
755 ipsystem = wrap_deprecated(self.ipsystem,'_ip.system()'),
756 _ip = self.api
756 _ip = self.api
757 )
757 )
758 for biname,bival in builtins_new.items():
758 for biname,bival in builtins_new.items():
759 try:
759 try:
760 # store the orignal value so we can restore it
760 # store the orignal value so we can restore it
761 self.builtins_added[biname] = __builtin__.__dict__[biname]
761 self.builtins_added[biname] = __builtin__.__dict__[biname]
762 except KeyError:
762 except KeyError:
763 # or mark that it wasn't defined, and we'll just delete it at
763 # or mark that it wasn't defined, and we'll just delete it at
764 # cleanup
764 # cleanup
765 self.builtins_added[biname] = Undefined
765 self.builtins_added[biname] = Undefined
766 __builtin__.__dict__[biname] = bival
766 __builtin__.__dict__[biname] = bival
767
767
768 # Keep in the builtins a flag for when IPython is active. We set it
768 # Keep in the builtins a flag for when IPython is active. We set it
769 # with setdefault so that multiple nested IPythons don't clobber one
769 # with setdefault so that multiple nested IPythons don't clobber one
770 # another. Each will increase its value by one upon being activated,
770 # another. Each will increase its value by one upon being activated,
771 # which also gives us a way to determine the nesting level.
771 # which also gives us a way to determine the nesting level.
772 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
772 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
773
773
774 def clean_builtins(self):
774 def clean_builtins(self):
775 """Remove any builtins which might have been added by add_builtins, or
775 """Remove any builtins which might have been added by add_builtins, or
776 restore overwritten ones to their previous values."""
776 restore overwritten ones to their previous values."""
777 for biname,bival in self.builtins_added.items():
777 for biname,bival in self.builtins_added.items():
778 if bival is Undefined:
778 if bival is Undefined:
779 del __builtin__.__dict__[biname]
779 del __builtin__.__dict__[biname]
780 else:
780 else:
781 __builtin__.__dict__[biname] = bival
781 __builtin__.__dict__[biname] = bival
782 self.builtins_added.clear()
782 self.builtins_added.clear()
783
783
784 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
784 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
785 """set_hook(name,hook) -> sets an internal IPython hook.
785 """set_hook(name,hook) -> sets an internal IPython hook.
786
786
787 IPython exposes some of its internal API as user-modifiable hooks. By
787 IPython exposes some of its internal API as user-modifiable hooks. By
788 adding your function to one of these hooks, you can modify IPython's
788 adding your function to one of these hooks, you can modify IPython's
789 behavior to call at runtime your own routines."""
789 behavior to call at runtime your own routines."""
790
790
791 # At some point in the future, this should validate the hook before it
791 # At some point in the future, this should validate the hook before it
792 # accepts it. Probably at least check that the hook takes the number
792 # accepts it. Probably at least check that the hook takes the number
793 # of args it's supposed to.
793 # of args it's supposed to.
794
794
795 f = new.instancemethod(hook,self,self.__class__)
795 f = new.instancemethod(hook,self,self.__class__)
796
796
797 # check if the hook is for strdispatcher first
797 # check if the hook is for strdispatcher first
798 if str_key is not None:
798 if str_key is not None:
799 sdp = self.strdispatchers.get(name, StrDispatch())
799 sdp = self.strdispatchers.get(name, StrDispatch())
800 sdp.add_s(str_key, f, priority )
800 sdp.add_s(str_key, f, priority )
801 self.strdispatchers[name] = sdp
801 self.strdispatchers[name] = sdp
802 return
802 return
803 if re_key is not None:
803 if re_key is not None:
804 sdp = self.strdispatchers.get(name, StrDispatch())
804 sdp = self.strdispatchers.get(name, StrDispatch())
805 sdp.add_re(re.compile(re_key), f, priority )
805 sdp.add_re(re.compile(re_key), f, priority )
806 self.strdispatchers[name] = sdp
806 self.strdispatchers[name] = sdp
807 return
807 return
808
808
809 dp = getattr(self.hooks, name, None)
809 dp = getattr(self.hooks, name, None)
810 if name not in IPython.hooks.__all__:
810 if name not in IPython.hooks.__all__:
811 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
811 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
812 if not dp:
812 if not dp:
813 dp = IPython.hooks.CommandChainDispatcher()
813 dp = IPython.hooks.CommandChainDispatcher()
814
814
815 try:
815 try:
816 dp.add(f,priority)
816 dp.add(f,priority)
817 except AttributeError:
817 except AttributeError:
818 # it was not commandchain, plain old func - replace
818 # it was not commandchain, plain old func - replace
819 dp = f
819 dp = f
820
820
821 setattr(self.hooks,name, dp)
821 setattr(self.hooks,name, dp)
822
822
823
823
824 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
824 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
825
825
826 def set_crash_handler(self,crashHandler):
826 def set_crash_handler(self,crashHandler):
827 """Set the IPython crash handler.
827 """Set the IPython crash handler.
828
828
829 This must be a callable with a signature suitable for use as
829 This must be a callable with a signature suitable for use as
830 sys.excepthook."""
830 sys.excepthook."""
831
831
832 # Install the given crash handler as the Python exception hook
832 # Install the given crash handler as the Python exception hook
833 sys.excepthook = crashHandler
833 sys.excepthook = crashHandler
834
834
835 # The instance will store a pointer to this, so that runtime code
835 # The instance will store a pointer to this, so that runtime code
836 # (such as magics) can access it. This is because during the
836 # (such as magics) can access it. This is because during the
837 # read-eval loop, it gets temporarily overwritten (to deal with GUI
837 # read-eval loop, it gets temporarily overwritten (to deal with GUI
838 # frameworks).
838 # frameworks).
839 self.sys_excepthook = sys.excepthook
839 self.sys_excepthook = sys.excepthook
840
840
841
841
842 def set_custom_exc(self,exc_tuple,handler):
842 def set_custom_exc(self,exc_tuple,handler):
843 """set_custom_exc(exc_tuple,handler)
843 """set_custom_exc(exc_tuple,handler)
844
844
845 Set a custom exception handler, which will be called if any of the
845 Set a custom exception handler, which will be called if any of the
846 exceptions in exc_tuple occur in the mainloop (specifically, in the
846 exceptions in exc_tuple occur in the mainloop (specifically, in the
847 runcode() method.
847 runcode() method.
848
848
849 Inputs:
849 Inputs:
850
850
851 - exc_tuple: a *tuple* of valid exceptions to call the defined
851 - exc_tuple: a *tuple* of valid exceptions to call the defined
852 handler for. It is very important that you use a tuple, and NOT A
852 handler for. It is very important that you use a tuple, and NOT A
853 LIST here, because of the way Python's except statement works. If
853 LIST here, because of the way Python's except statement works. If
854 you only want to trap a single exception, use a singleton tuple:
854 you only want to trap a single exception, use a singleton tuple:
855
855
856 exc_tuple == (MyCustomException,)
856 exc_tuple == (MyCustomException,)
857
857
858 - handler: this must be defined as a function with the following
858 - handler: this must be defined as a function with the following
859 basic interface: def my_handler(self,etype,value,tb).
859 basic interface: def my_handler(self,etype,value,tb).
860
860
861 This will be made into an instance method (via new.instancemethod)
861 This will be made into an instance method (via new.instancemethod)
862 of IPython itself, and it will be called if any of the exceptions
862 of IPython itself, and it will be called if any of the exceptions
863 listed in the exc_tuple are caught. If the handler is None, an
863 listed in the exc_tuple are caught. If the handler is None, an
864 internal basic one is used, which just prints basic info.
864 internal basic one is used, which just prints basic info.
865
865
866 WARNING: by putting in your own exception handler into IPython's main
866 WARNING: by putting in your own exception handler into IPython's main
867 execution loop, you run a very good chance of nasty crashes. This
867 execution loop, you run a very good chance of nasty crashes. This
868 facility should only be used if you really know what you are doing."""
868 facility should only be used if you really know what you are doing."""
869
869
870 assert type(exc_tuple)==type(()) , \
870 assert type(exc_tuple)==type(()) , \
871 "The custom exceptions must be given AS A TUPLE."
871 "The custom exceptions must be given AS A TUPLE."
872
872
873 def dummy_handler(self,etype,value,tb):
873 def dummy_handler(self,etype,value,tb):
874 print '*** Simple custom exception handler ***'
874 print '*** Simple custom exception handler ***'
875 print 'Exception type :',etype
875 print 'Exception type :',etype
876 print 'Exception value:',value
876 print 'Exception value:',value
877 print 'Traceback :',tb
877 print 'Traceback :',tb
878 print 'Source code :','\n'.join(self.buffer)
878 print 'Source code :','\n'.join(self.buffer)
879
879
880 if handler is None: handler = dummy_handler
880 if handler is None: handler = dummy_handler
881
881
882 self.CustomTB = new.instancemethod(handler,self,self.__class__)
882 self.CustomTB = new.instancemethod(handler,self,self.__class__)
883 self.custom_exceptions = exc_tuple
883 self.custom_exceptions = exc_tuple
884
884
885 def set_custom_completer(self,completer,pos=0):
885 def set_custom_completer(self,completer,pos=0):
886 """set_custom_completer(completer,pos=0)
886 """set_custom_completer(completer,pos=0)
887
887
888 Adds a new custom completer function.
888 Adds a new custom completer function.
889
889
890 The position argument (defaults to 0) is the index in the completers
890 The position argument (defaults to 0) is the index in the completers
891 list where you want the completer to be inserted."""
891 list where you want the completer to be inserted."""
892
892
893 newcomp = new.instancemethod(completer,self.Completer,
893 newcomp = new.instancemethod(completer,self.Completer,
894 self.Completer.__class__)
894 self.Completer.__class__)
895 self.Completer.matchers.insert(pos,newcomp)
895 self.Completer.matchers.insert(pos,newcomp)
896
896
897 def set_completer(self):
897 def set_completer(self):
898 """reset readline's completer to be our own."""
898 """reset readline's completer to be our own."""
899 self.readline.set_completer(self.Completer.complete)
899 self.readline.set_completer(self.Completer.complete)
900
900
901 def _get_call_pdb(self):
901 def _get_call_pdb(self):
902 return self._call_pdb
902 return self._call_pdb
903
903
904 def _set_call_pdb(self,val):
904 def _set_call_pdb(self,val):
905
905
906 if val not in (0,1,False,True):
906 if val not in (0,1,False,True):
907 raise ValueError,'new call_pdb value must be boolean'
907 raise ValueError,'new call_pdb value must be boolean'
908
908
909 # store value in instance
909 # store value in instance
910 self._call_pdb = val
910 self._call_pdb = val
911
911
912 # notify the actual exception handlers
912 # notify the actual exception handlers
913 self.InteractiveTB.call_pdb = val
913 self.InteractiveTB.call_pdb = val
914 if self.isthreaded:
914 if self.isthreaded:
915 try:
915 try:
916 self.sys_excepthook.call_pdb = val
916 self.sys_excepthook.call_pdb = val
917 except:
917 except:
918 warn('Failed to activate pdb for threaded exception handler')
918 warn('Failed to activate pdb for threaded exception handler')
919
919
920 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
920 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
921 'Control auto-activation of pdb at exceptions')
921 'Control auto-activation of pdb at exceptions')
922
922
923
923
924 # These special functions get installed in the builtin namespace, to
924 # These special functions get installed in the builtin namespace, to
925 # provide programmatic (pure python) access to magics, aliases and system
925 # provide programmatic (pure python) access to magics, aliases and system
926 # calls. This is important for logging, user scripting, and more.
926 # calls. This is important for logging, user scripting, and more.
927
927
928 # We are basically exposing, via normal python functions, the three
928 # We are basically exposing, via normal python functions, the three
929 # mechanisms in which ipython offers special call modes (magics for
929 # mechanisms in which ipython offers special call modes (magics for
930 # internal control, aliases for direct system access via pre-selected
930 # internal control, aliases for direct system access via pre-selected
931 # names, and !cmd for calling arbitrary system commands).
931 # names, and !cmd for calling arbitrary system commands).
932
932
933 def ipmagic(self,arg_s):
933 def ipmagic(self,arg_s):
934 """Call a magic function by name.
934 """Call a magic function by name.
935
935
936 Input: a string containing the name of the magic function to call and any
936 Input: a string containing the name of the magic function to call and any
937 additional arguments to be passed to the magic.
937 additional arguments to be passed to the magic.
938
938
939 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
939 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
940 prompt:
940 prompt:
941
941
942 In[1]: %name -opt foo bar
942 In[1]: %name -opt foo bar
943
943
944 To call a magic without arguments, simply use ipmagic('name').
944 To call a magic without arguments, simply use ipmagic('name').
945
945
946 This provides a proper Python function to call IPython's magics in any
946 This provides a proper Python function to call IPython's magics in any
947 valid Python code you can type at the interpreter, including loops and
947 valid Python code you can type at the interpreter, including loops and
948 compound statements. It is added by IPython to the Python builtin
948 compound statements. It is added by IPython to the Python builtin
949 namespace upon initialization."""
949 namespace upon initialization."""
950
950
951 args = arg_s.split(' ',1)
951 args = arg_s.split(' ',1)
952 magic_name = args[0]
952 magic_name = args[0]
953 magic_name = magic_name.lstrip(self.ESC_MAGIC)
953 magic_name = magic_name.lstrip(self.ESC_MAGIC)
954
954
955 try:
955 try:
956 magic_args = args[1]
956 magic_args = args[1]
957 except IndexError:
957 except IndexError:
958 magic_args = ''
958 magic_args = ''
959 fn = getattr(self,'magic_'+magic_name,None)
959 fn = getattr(self,'magic_'+magic_name,None)
960 if fn is None:
960 if fn is None:
961 error("Magic function `%s` not found." % magic_name)
961 error("Magic function `%s` not found." % magic_name)
962 else:
962 else:
963 magic_args = self.var_expand(magic_args,1)
963 magic_args = self.var_expand(magic_args,1)
964 return fn(magic_args)
964 return fn(magic_args)
965
965
966 def ipalias(self,arg_s):
966 def ipalias(self,arg_s):
967 """Call an alias by name.
967 """Call an alias by name.
968
968
969 Input: a string containing the name of the alias to call and any
969 Input: a string containing the name of the alias to call and any
970 additional arguments to be passed to the magic.
970 additional arguments to be passed to the magic.
971
971
972 ipalias('name -opt foo bar') is equivalent to typing at the ipython
972 ipalias('name -opt foo bar') is equivalent to typing at the ipython
973 prompt:
973 prompt:
974
974
975 In[1]: name -opt foo bar
975 In[1]: name -opt foo bar
976
976
977 To call an alias without arguments, simply use ipalias('name').
977 To call an alias without arguments, simply use ipalias('name').
978
978
979 This provides a proper Python function to call IPython's aliases in any
979 This provides a proper Python function to call IPython's aliases in any
980 valid Python code you can type at the interpreter, including loops and
980 valid Python code you can type at the interpreter, including loops and
981 compound statements. It is added by IPython to the Python builtin
981 compound statements. It is added by IPython to the Python builtin
982 namespace upon initialization."""
982 namespace upon initialization."""
983
983
984 args = arg_s.split(' ',1)
984 args = arg_s.split(' ',1)
985 alias_name = args[0]
985 alias_name = args[0]
986 try:
986 try:
987 alias_args = args[1]
987 alias_args = args[1]
988 except IndexError:
988 except IndexError:
989 alias_args = ''
989 alias_args = ''
990 if alias_name in self.alias_table:
990 if alias_name in self.alias_table:
991 self.call_alias(alias_name,alias_args)
991 self.call_alias(alias_name,alias_args)
992 else:
992 else:
993 error("Alias `%s` not found." % alias_name)
993 error("Alias `%s` not found." % alias_name)
994
994
995 def ipsystem(self,arg_s):
995 def ipsystem(self,arg_s):
996 """Make a system call, using IPython."""
996 """Make a system call, using IPython."""
997
997
998 self.system(arg_s)
998 self.system(arg_s)
999
999
1000 def complete(self,text):
1000 def complete(self,text):
1001 """Return a sorted list of all possible completions on text.
1001 """Return a sorted list of all possible completions on text.
1002
1002
1003 Inputs:
1003 Inputs:
1004
1004
1005 - text: a string of text to be completed on.
1005 - text: a string of text to be completed on.
1006
1006
1007 This is a wrapper around the completion mechanism, similar to what
1007 This is a wrapper around the completion mechanism, similar to what
1008 readline does at the command line when the TAB key is hit. By
1008 readline does at the command line when the TAB key is hit. By
1009 exposing it as a method, it can be used by other non-readline
1009 exposing it as a method, it can be used by other non-readline
1010 environments (such as GUIs) for text completion.
1010 environments (such as GUIs) for text completion.
1011
1011
1012 Simple usage example:
1012 Simple usage example:
1013
1013
1014 In [1]: x = 'hello'
1014 In [1]: x = 'hello'
1015
1015
1016 In [2]: __IP.complete('x.l')
1016 In [2]: __IP.complete('x.l')
1017 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
1017 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
1018
1018
1019 complete = self.Completer.complete
1019 complete = self.Completer.complete
1020 state = 0
1020 state = 0
1021 # use a dict so we get unique keys, since ipyhton's multiple
1021 # use a dict so we get unique keys, since ipyhton's multiple
1022 # completers can return duplicates. When we make 2.4 a requirement,
1022 # completers can return duplicates. When we make 2.4 a requirement,
1023 # start using sets instead, which are faster.
1023 # start using sets instead, which are faster.
1024 comps = {}
1024 comps = {}
1025 while True:
1025 while True:
1026 newcomp = complete(text,state,line_buffer=text)
1026 newcomp = complete(text,state,line_buffer=text)
1027 if newcomp is None:
1027 if newcomp is None:
1028 break
1028 break
1029 comps[newcomp] = 1
1029 comps[newcomp] = 1
1030 state += 1
1030 state += 1
1031 outcomps = comps.keys()
1031 outcomps = comps.keys()
1032 outcomps.sort()
1032 outcomps.sort()
1033 return outcomps
1033 return outcomps
1034
1034
1035 def set_completer_frame(self, frame=None):
1035 def set_completer_frame(self, frame=None):
1036 if frame:
1036 if frame:
1037 self.Completer.namespace = frame.f_locals
1037 self.Completer.namespace = frame.f_locals
1038 self.Completer.global_namespace = frame.f_globals
1038 self.Completer.global_namespace = frame.f_globals
1039 else:
1039 else:
1040 self.Completer.namespace = self.user_ns
1040 self.Completer.namespace = self.user_ns
1041 self.Completer.global_namespace = self.user_global_ns
1041 self.Completer.global_namespace = self.user_global_ns
1042
1042
1043 def init_auto_alias(self):
1043 def init_auto_alias(self):
1044 """Define some aliases automatically.
1044 """Define some aliases automatically.
1045
1045
1046 These are ALL parameter-less aliases"""
1046 These are ALL parameter-less aliases"""
1047
1047
1048 for alias,cmd in self.auto_alias:
1048 for alias,cmd in self.auto_alias:
1049 self.alias_table[alias] = (0,cmd)
1049 self.alias_table[alias] = (0,cmd)
1050
1050
1051 def alias_table_validate(self,verbose=0):
1051 def alias_table_validate(self,verbose=0):
1052 """Update information about the alias table.
1052 """Update information about the alias table.
1053
1053
1054 In particular, make sure no Python keywords/builtins are in it."""
1054 In particular, make sure no Python keywords/builtins are in it."""
1055
1055
1056 no_alias = self.no_alias
1056 no_alias = self.no_alias
1057 for k in self.alias_table.keys():
1057 for k in self.alias_table.keys():
1058 if k in no_alias:
1058 if k in no_alias:
1059 del self.alias_table[k]
1059 del self.alias_table[k]
1060 if verbose:
1060 if verbose:
1061 print ("Deleting alias <%s>, it's a Python "
1061 print ("Deleting alias <%s>, it's a Python "
1062 "keyword or builtin." % k)
1062 "keyword or builtin." % k)
1063
1063
1064 def set_autoindent(self,value=None):
1064 def set_autoindent(self,value=None):
1065 """Set the autoindent flag, checking for readline support.
1065 """Set the autoindent flag, checking for readline support.
1066
1066
1067 If called with no arguments, it acts as a toggle."""
1067 If called with no arguments, it acts as a toggle."""
1068
1068
1069 if not self.has_readline:
1069 if not self.has_readline:
1070 if os.name == 'posix':
1070 if os.name == 'posix':
1071 warn("The auto-indent feature requires the readline library")
1071 warn("The auto-indent feature requires the readline library")
1072 self.autoindent = 0
1072 self.autoindent = 0
1073 return
1073 return
1074 if value is None:
1074 if value is None:
1075 self.autoindent = not self.autoindent
1075 self.autoindent = not self.autoindent
1076 else:
1076 else:
1077 self.autoindent = value
1077 self.autoindent = value
1078
1078
1079 def rc_set_toggle(self,rc_field,value=None):
1079 def rc_set_toggle(self,rc_field,value=None):
1080 """Set or toggle a field in IPython's rc config. structure.
1080 """Set or toggle a field in IPython's rc config. structure.
1081
1081
1082 If called with no arguments, it acts as a toggle.
1082 If called with no arguments, it acts as a toggle.
1083
1083
1084 If called with a non-existent field, the resulting AttributeError
1084 If called with a non-existent field, the resulting AttributeError
1085 exception will propagate out."""
1085 exception will propagate out."""
1086
1086
1087 rc_val = getattr(self.rc,rc_field)
1087 rc_val = getattr(self.rc,rc_field)
1088 if value is None:
1088 if value is None:
1089 value = not rc_val
1089 value = not rc_val
1090 setattr(self.rc,rc_field,value)
1090 setattr(self.rc,rc_field,value)
1091
1091
1092 def user_setup(self,ipythondir,rc_suffix,mode='install'):
1092 def user_setup(self,ipythondir,rc_suffix,mode='install'):
1093 """Install the user configuration directory.
1093 """Install the user configuration directory.
1094
1094
1095 Can be called when running for the first time or to upgrade the user's
1095 Can be called when running for the first time or to upgrade the user's
1096 .ipython/ directory with the mode parameter. Valid modes are 'install'
1096 .ipython/ directory with the mode parameter. Valid modes are 'install'
1097 and 'upgrade'."""
1097 and 'upgrade'."""
1098
1098
1099 def wait():
1099 def wait():
1100 try:
1100 try:
1101 raw_input("Please press <RETURN> to start IPython.")
1101 raw_input("Please press <RETURN> to start IPython.")
1102 except EOFError:
1102 except EOFError:
1103 print >> Term.cout
1103 print >> Term.cout
1104 print '*'*70
1104 print '*'*70
1105
1105
1106 cwd = os.getcwd() # remember where we started
1106 cwd = os.getcwd() # remember where we started
1107 glb = glob.glob
1107 glb = glob.glob
1108 print '*'*70
1108 print '*'*70
1109 if mode == 'install':
1109 if mode == 'install':
1110 print \
1110 print \
1111 """Welcome to IPython. I will try to create a personal configuration directory
1111 """Welcome to IPython. I will try to create a personal configuration directory
1112 where you can customize many aspects of IPython's functionality in:\n"""
1112 where you can customize many aspects of IPython's functionality in:\n"""
1113 else:
1113 else:
1114 print 'I am going to upgrade your configuration in:'
1114 print 'I am going to upgrade your configuration in:'
1115
1115
1116 print ipythondir
1116 print ipythondir
1117
1117
1118 rcdirend = os.path.join('IPython','UserConfig')
1118 rcdirend = os.path.join('IPython','UserConfig')
1119 cfg = lambda d: os.path.join(d,rcdirend)
1119 cfg = lambda d: os.path.join(d,rcdirend)
1120 try:
1120 try:
1121 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1121 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1122 except IOError:
1122 except IOError:
1123 warning = """
1123 warning = """
1124 Installation error. IPython's directory was not found.
1124 Installation error. IPython's directory was not found.
1125
1125
1126 Check the following:
1126 Check the following:
1127
1127
1128 The ipython/IPython directory should be in a directory belonging to your
1128 The ipython/IPython directory should be in a directory belonging to your
1129 PYTHONPATH environment variable (that is, it should be in a directory
1129 PYTHONPATH environment variable (that is, it should be in a directory
1130 belonging to sys.path). You can copy it explicitly there or just link to it.
1130 belonging to sys.path). You can copy it explicitly there or just link to it.
1131
1131
1132 IPython will proceed with builtin defaults.
1132 IPython will proceed with builtin defaults.
1133 """
1133 """
1134 warn(warning)
1134 warn(warning)
1135 wait()
1135 wait()
1136 return
1136 return
1137
1137
1138 if mode == 'install':
1138 if mode == 'install':
1139 try:
1139 try:
1140 shutil.copytree(rcdir,ipythondir)
1140 shutil.copytree(rcdir,ipythondir)
1141 os.chdir(ipythondir)
1141 os.chdir(ipythondir)
1142 rc_files = glb("ipythonrc*")
1142 rc_files = glb("ipythonrc*")
1143 for rc_file in rc_files:
1143 for rc_file in rc_files:
1144 os.rename(rc_file,rc_file+rc_suffix)
1144 os.rename(rc_file,rc_file+rc_suffix)
1145 except:
1145 except:
1146 warning = """
1146 warning = """
1147
1147
1148 There was a problem with the installation:
1148 There was a problem with the installation:
1149 %s
1149 %s
1150 Try to correct it or contact the developers if you think it's a bug.
1150 Try to correct it or contact the developers if you think it's a bug.
1151 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1151 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1152 warn(warning)
1152 warn(warning)
1153 wait()
1153 wait()
1154 return
1154 return
1155
1155
1156 elif mode == 'upgrade':
1156 elif mode == 'upgrade':
1157 try:
1157 try:
1158 os.chdir(ipythondir)
1158 os.chdir(ipythondir)
1159 except:
1159 except:
1160 print """
1160 print """
1161 Can not upgrade: changing to directory %s failed. Details:
1161 Can not upgrade: changing to directory %s failed. Details:
1162 %s
1162 %s
1163 """ % (ipythondir,sys.exc_info()[1])
1163 """ % (ipythondir,sys.exc_info()[1])
1164 wait()
1164 wait()
1165 return
1165 return
1166 else:
1166 else:
1167 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1167 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1168 for new_full_path in sources:
1168 for new_full_path in sources:
1169 new_filename = os.path.basename(new_full_path)
1169 new_filename = os.path.basename(new_full_path)
1170 if new_filename.startswith('ipythonrc'):
1170 if new_filename.startswith('ipythonrc'):
1171 new_filename = new_filename + rc_suffix
1171 new_filename = new_filename + rc_suffix
1172 # The config directory should only contain files, skip any
1172 # The config directory should only contain files, skip any
1173 # directories which may be there (like CVS)
1173 # directories which may be there (like CVS)
1174 if os.path.isdir(new_full_path):
1174 if os.path.isdir(new_full_path):
1175 continue
1175 continue
1176 if os.path.exists(new_filename):
1176 if os.path.exists(new_filename):
1177 old_file = new_filename+'.old'
1177 old_file = new_filename+'.old'
1178 if os.path.exists(old_file):
1178 if os.path.exists(old_file):
1179 os.remove(old_file)
1179 os.remove(old_file)
1180 os.rename(new_filename,old_file)
1180 os.rename(new_filename,old_file)
1181 shutil.copy(new_full_path,new_filename)
1181 shutil.copy(new_full_path,new_filename)
1182 else:
1182 else:
1183 raise ValueError,'unrecognized mode for install:',`mode`
1183 raise ValueError,'unrecognized mode for install:',`mode`
1184
1184
1185 # Fix line-endings to those native to each platform in the config
1185 # Fix line-endings to those native to each platform in the config
1186 # directory.
1186 # directory.
1187 try:
1187 try:
1188 os.chdir(ipythondir)
1188 os.chdir(ipythondir)
1189 except:
1189 except:
1190 print """
1190 print """
1191 Problem: changing to directory %s failed.
1191 Problem: changing to directory %s failed.
1192 Details:
1192 Details:
1193 %s
1193 %s
1194
1194
1195 Some configuration files may have incorrect line endings. This should not
1195 Some configuration files may have incorrect line endings. This should not
1196 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1196 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1197 wait()
1197 wait()
1198 else:
1198 else:
1199 for fname in glb('ipythonrc*'):
1199 for fname in glb('ipythonrc*'):
1200 try:
1200 try:
1201 native_line_ends(fname,backup=0)
1201 native_line_ends(fname,backup=0)
1202 except IOError:
1202 except IOError:
1203 pass
1203 pass
1204
1204
1205 if mode == 'install':
1205 if mode == 'install':
1206 print """
1206 print """
1207 Successful installation!
1207 Successful installation!
1208
1208
1209 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1209 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1210 IPython manual (there are both HTML and PDF versions supplied with the
1210 IPython manual (there are both HTML and PDF versions supplied with the
1211 distribution) to make sure that your system environment is properly configured
1211 distribution) to make sure that your system environment is properly configured
1212 to take advantage of IPython's features.
1212 to take advantage of IPython's features.
1213
1213
1214 Important note: the configuration system has changed! The old system is
1214 Important note: the configuration system has changed! The old system is
1215 still in place, but its setting may be partly overridden by the settings in
1215 still in place, but its setting may be partly overridden by the settings in
1216 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1216 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1217 if some of the new settings bother you.
1217 if some of the new settings bother you.
1218
1218
1219 """
1219 """
1220 else:
1220 else:
1221 print """
1221 print """
1222 Successful upgrade!
1222 Successful upgrade!
1223
1223
1224 All files in your directory:
1224 All files in your directory:
1225 %(ipythondir)s
1225 %(ipythondir)s
1226 which would have been overwritten by the upgrade were backed up with a .old
1226 which would have been overwritten by the upgrade were backed up with a .old
1227 extension. If you had made particular customizations in those files you may
1227 extension. If you had made particular customizations in those files you may
1228 want to merge them back into the new files.""" % locals()
1228 want to merge them back into the new files.""" % locals()
1229 wait()
1229 wait()
1230 os.chdir(cwd)
1230 os.chdir(cwd)
1231 # end user_setup()
1231 # end user_setup()
1232
1232
1233 def atexit_operations(self):
1233 def atexit_operations(self):
1234 """This will be executed at the time of exit.
1234 """This will be executed at the time of exit.
1235
1235
1236 Saving of persistent data should be performed here. """
1236 Saving of persistent data should be performed here. """
1237
1237
1238 #print '*** IPython exit cleanup ***' # dbg
1238 #print '*** IPython exit cleanup ***' # dbg
1239 # input history
1239 # input history
1240 self.savehist()
1240 self.savehist()
1241
1241
1242 # Cleanup all tempfiles left around
1242 # Cleanup all tempfiles left around
1243 for tfile in self.tempfiles:
1243 for tfile in self.tempfiles:
1244 try:
1244 try:
1245 os.unlink(tfile)
1245 os.unlink(tfile)
1246 except OSError:
1246 except OSError:
1247 pass
1247 pass
1248
1248
1249 # save the "persistent data" catch-all dictionary
1249 # save the "persistent data" catch-all dictionary
1250 self.hooks.shutdown_hook()
1250 self.hooks.shutdown_hook()
1251
1251
1252 def savehist(self):
1252 def savehist(self):
1253 """Save input history to a file (via readline library)."""
1253 """Save input history to a file (via readline library)."""
1254 try:
1254 try:
1255 self.readline.write_history_file(self.histfile)
1255 self.readline.write_history_file(self.histfile)
1256 except:
1256 except:
1257 print 'Unable to save IPython command history to file: ' + \
1257 print 'Unable to save IPython command history to file: ' + \
1258 `self.histfile`
1258 `self.histfile`
1259
1259
1260 def reloadhist(self):
1260 def reloadhist(self):
1261 """Reload the input history from disk file."""
1261 """Reload the input history from disk file."""
1262
1262
1263 if self.has_readline:
1263 if self.has_readline:
1264 self.readline.clear_history()
1264 self.readline.clear_history()
1265 self.readline.read_history_file(self.shell.histfile)
1265 self.readline.read_history_file(self.shell.histfile)
1266
1266
1267 def history_saving_wrapper(self, func):
1267 def history_saving_wrapper(self, func):
1268 """ Wrap func for readline history saving
1268 """ Wrap func for readline history saving
1269
1269
1270 Convert func into callable that saves & restores
1270 Convert func into callable that saves & restores
1271 history around the call """
1271 history around the call """
1272
1272
1273 if not self.has_readline:
1273 if not self.has_readline:
1274 return func
1274 return func
1275
1275
1276 def wrapper():
1276 def wrapper():
1277 self.savehist()
1277 self.savehist()
1278 try:
1278 try:
1279 func()
1279 func()
1280 finally:
1280 finally:
1281 readline.read_history_file(self.histfile)
1281 readline.read_history_file(self.histfile)
1282 return wrapper
1282 return wrapper
1283
1283
1284
1284
1285 def pre_readline(self):
1285 def pre_readline(self):
1286 """readline hook to be used at the start of each line.
1286 """readline hook to be used at the start of each line.
1287
1287
1288 Currently it handles auto-indent only."""
1288 Currently it handles auto-indent only."""
1289
1289
1290 #debugx('self.indent_current_nsp','pre_readline:')
1290 #debugx('self.indent_current_nsp','pre_readline:')
1291 print "prer",self.indent_current_nsp # dbg
1291
1292 print
1293
1294 self.readline.insert_text(self.indent_current_str())
1292 self.readline.insert_text(self.indent_current_str())
1295
1293
1296 def init_readline(self):
1294 def init_readline(self):
1297 """Command history completion/saving/reloading."""
1295 """Command history completion/saving/reloading."""
1298
1296
1299 import IPython.rlineimpl as readline
1297 import IPython.rlineimpl as readline
1300 if not readline.have_readline:
1298 if not readline.have_readline:
1301 self.has_readline = 0
1299 self.has_readline = 0
1302 self.readline = None
1300 self.readline = None
1303 # no point in bugging windows users with this every time:
1301 # no point in bugging windows users with this every time:
1304 warn('Readline services not available on this platform.')
1302 warn('Readline services not available on this platform.')
1305 else:
1303 else:
1306 sys.modules['readline'] = readline
1304 sys.modules['readline'] = readline
1307 import atexit
1305 import atexit
1308 from IPython.completer import IPCompleter
1306 from IPython.completer import IPCompleter
1309 self.Completer = IPCompleter(self,
1307 self.Completer = IPCompleter(self,
1310 self.user_ns,
1308 self.user_ns,
1311 self.user_global_ns,
1309 self.user_global_ns,
1312 self.rc.readline_omit__names,
1310 self.rc.readline_omit__names,
1313 self.alias_table)
1311 self.alias_table)
1314 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1312 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1315 self.strdispatchers['complete_command'] = sdisp
1313 self.strdispatchers['complete_command'] = sdisp
1316 self.Completer.custom_completers = sdisp
1314 self.Completer.custom_completers = sdisp
1317 # Platform-specific configuration
1315 # Platform-specific configuration
1318 if os.name == 'nt':
1316 if os.name == 'nt':
1319 self.readline_startup_hook = readline.set_pre_input_hook
1317 self.readline_startup_hook = readline.set_pre_input_hook
1320 else:
1318 else:
1321 self.readline_startup_hook = readline.set_startup_hook
1319 self.readline_startup_hook = readline.set_startup_hook
1322
1320
1323 # Load user's initrc file (readline config)
1321 # Load user's initrc file (readline config)
1324 inputrc_name = os.environ.get('INPUTRC')
1322 inputrc_name = os.environ.get('INPUTRC')
1325 if inputrc_name is None:
1323 if inputrc_name is None:
1326 home_dir = get_home_dir()
1324 home_dir = get_home_dir()
1327 if home_dir is not None:
1325 if home_dir is not None:
1328 inputrc_name = os.path.join(home_dir,'.inputrc')
1326 inputrc_name = os.path.join(home_dir,'.inputrc')
1329 if os.path.isfile(inputrc_name):
1327 if os.path.isfile(inputrc_name):
1330 try:
1328 try:
1331 readline.read_init_file(inputrc_name)
1329 readline.read_init_file(inputrc_name)
1332 except:
1330 except:
1333 warn('Problems reading readline initialization file <%s>'
1331 warn('Problems reading readline initialization file <%s>'
1334 % inputrc_name)
1332 % inputrc_name)
1335
1333
1336 self.has_readline = 1
1334 self.has_readline = 1
1337 self.readline = readline
1335 self.readline = readline
1338 # save this in sys so embedded copies can restore it properly
1336 # save this in sys so embedded copies can restore it properly
1339 sys.ipcompleter = self.Completer.complete
1337 sys.ipcompleter = self.Completer.complete
1340 self.set_completer()
1338 self.set_completer()
1341
1339
1342 # Configure readline according to user's prefs
1340 # Configure readline according to user's prefs
1343 for rlcommand in self.rc.readline_parse_and_bind:
1341 for rlcommand in self.rc.readline_parse_and_bind:
1344 readline.parse_and_bind(rlcommand)
1342 readline.parse_and_bind(rlcommand)
1345
1343
1346 # remove some chars from the delimiters list
1344 # remove some chars from the delimiters list
1347 delims = readline.get_completer_delims()
1345 delims = readline.get_completer_delims()
1348 delims = delims.translate(string._idmap,
1346 delims = delims.translate(string._idmap,
1349 self.rc.readline_remove_delims)
1347 self.rc.readline_remove_delims)
1350 readline.set_completer_delims(delims)
1348 readline.set_completer_delims(delims)
1351 # otherwise we end up with a monster history after a while:
1349 # otherwise we end up with a monster history after a while:
1352 readline.set_history_length(1000)
1350 readline.set_history_length(1000)
1353 try:
1351 try:
1354 #print '*** Reading readline history' # dbg
1352 #print '*** Reading readline history' # dbg
1355 readline.read_history_file(self.histfile)
1353 readline.read_history_file(self.histfile)
1356 except IOError:
1354 except IOError:
1357 pass # It doesn't exist yet.
1355 pass # It doesn't exist yet.
1358
1356
1359 atexit.register(self.atexit_operations)
1357 atexit.register(self.atexit_operations)
1360 del atexit
1358 del atexit
1361
1359
1362 # Configure auto-indent for all platforms
1360 # Configure auto-indent for all platforms
1363 self.set_autoindent(self.rc.autoindent)
1361 self.set_autoindent(self.rc.autoindent)
1364
1362
1365 def ask_yes_no(self,prompt,default=True):
1363 def ask_yes_no(self,prompt,default=True):
1366 if self.rc.quiet:
1364 if self.rc.quiet:
1367 return True
1365 return True
1368 return ask_yes_no(prompt,default)
1366 return ask_yes_no(prompt,default)
1369
1367
1370 def _should_recompile(self,e):
1368 def _should_recompile(self,e):
1371 """Utility routine for edit_syntax_error"""
1369 """Utility routine for edit_syntax_error"""
1372
1370
1373 if e.filename in ('<ipython console>','<input>','<string>',
1371 if e.filename in ('<ipython console>','<input>','<string>',
1374 '<console>','<BackgroundJob compilation>',
1372 '<console>','<BackgroundJob compilation>',
1375 None):
1373 None):
1376
1374
1377 return False
1375 return False
1378 try:
1376 try:
1379 if (self.rc.autoedit_syntax and
1377 if (self.rc.autoedit_syntax and
1380 not self.ask_yes_no('Return to editor to correct syntax error? '
1378 not self.ask_yes_no('Return to editor to correct syntax error? '
1381 '[Y/n] ','y')):
1379 '[Y/n] ','y')):
1382 return False
1380 return False
1383 except EOFError:
1381 except EOFError:
1384 return False
1382 return False
1385
1383
1386 def int0(x):
1384 def int0(x):
1387 try:
1385 try:
1388 return int(x)
1386 return int(x)
1389 except TypeError:
1387 except TypeError:
1390 return 0
1388 return 0
1391 # always pass integer line and offset values to editor hook
1389 # always pass integer line and offset values to editor hook
1392 self.hooks.fix_error_editor(e.filename,
1390 self.hooks.fix_error_editor(e.filename,
1393 int0(e.lineno),int0(e.offset),e.msg)
1391 int0(e.lineno),int0(e.offset),e.msg)
1394 return True
1392 return True
1395
1393
1396 def edit_syntax_error(self):
1394 def edit_syntax_error(self):
1397 """The bottom half of the syntax error handler called in the main loop.
1395 """The bottom half of the syntax error handler called in the main loop.
1398
1396
1399 Loop until syntax error is fixed or user cancels.
1397 Loop until syntax error is fixed or user cancels.
1400 """
1398 """
1401
1399
1402 while self.SyntaxTB.last_syntax_error:
1400 while self.SyntaxTB.last_syntax_error:
1403 # copy and clear last_syntax_error
1401 # copy and clear last_syntax_error
1404 err = self.SyntaxTB.clear_err_state()
1402 err = self.SyntaxTB.clear_err_state()
1405 if not self._should_recompile(err):
1403 if not self._should_recompile(err):
1406 return
1404 return
1407 try:
1405 try:
1408 # may set last_syntax_error again if a SyntaxError is raised
1406 # may set last_syntax_error again if a SyntaxError is raised
1409 self.safe_execfile(err.filename,self.user_ns)
1407 self.safe_execfile(err.filename,self.user_ns)
1410 except:
1408 except:
1411 self.showtraceback()
1409 self.showtraceback()
1412 else:
1410 else:
1413 try:
1411 try:
1414 f = file(err.filename)
1412 f = file(err.filename)
1415 try:
1413 try:
1416 sys.displayhook(f.read())
1414 sys.displayhook(f.read())
1417 finally:
1415 finally:
1418 f.close()
1416 f.close()
1419 except:
1417 except:
1420 self.showtraceback()
1418 self.showtraceback()
1421
1419
1422 def showsyntaxerror(self, filename=None):
1420 def showsyntaxerror(self, filename=None):
1423 """Display the syntax error that just occurred.
1421 """Display the syntax error that just occurred.
1424
1422
1425 This doesn't display a stack trace because there isn't one.
1423 This doesn't display a stack trace because there isn't one.
1426
1424
1427 If a filename is given, it is stuffed in the exception instead
1425 If a filename is given, it is stuffed in the exception instead
1428 of what was there before (because Python's parser always uses
1426 of what was there before (because Python's parser always uses
1429 "<string>" when reading from a string).
1427 "<string>" when reading from a string).
1430 """
1428 """
1431 etype, value, last_traceback = sys.exc_info()
1429 etype, value, last_traceback = sys.exc_info()
1432
1430
1433 # See note about these variables in showtraceback() below
1431 # See note about these variables in showtraceback() below
1434 sys.last_type = etype
1432 sys.last_type = etype
1435 sys.last_value = value
1433 sys.last_value = value
1436 sys.last_traceback = last_traceback
1434 sys.last_traceback = last_traceback
1437
1435
1438 if filename and etype is SyntaxError:
1436 if filename and etype is SyntaxError:
1439 # Work hard to stuff the correct filename in the exception
1437 # Work hard to stuff the correct filename in the exception
1440 try:
1438 try:
1441 msg, (dummy_filename, lineno, offset, line) = value
1439 msg, (dummy_filename, lineno, offset, line) = value
1442 except:
1440 except:
1443 # Not the format we expect; leave it alone
1441 # Not the format we expect; leave it alone
1444 pass
1442 pass
1445 else:
1443 else:
1446 # Stuff in the right filename
1444 # Stuff in the right filename
1447 try:
1445 try:
1448 # Assume SyntaxError is a class exception
1446 # Assume SyntaxError is a class exception
1449 value = SyntaxError(msg, (filename, lineno, offset, line))
1447 value = SyntaxError(msg, (filename, lineno, offset, line))
1450 except:
1448 except:
1451 # If that failed, assume SyntaxError is a string
1449 # If that failed, assume SyntaxError is a string
1452 value = msg, (filename, lineno, offset, line)
1450 value = msg, (filename, lineno, offset, line)
1453 self.SyntaxTB(etype,value,[])
1451 self.SyntaxTB(etype,value,[])
1454
1452
1455 def debugger(self,force=False):
1453 def debugger(self,force=False):
1456 """Call the pydb/pdb debugger.
1454 """Call the pydb/pdb debugger.
1457
1455
1458 Keywords:
1456 Keywords:
1459
1457
1460 - force(False): by default, this routine checks the instance call_pdb
1458 - force(False): by default, this routine checks the instance call_pdb
1461 flag and does not actually invoke the debugger if the flag is false.
1459 flag and does not actually invoke the debugger if the flag is false.
1462 The 'force' option forces the debugger to activate even if the flag
1460 The 'force' option forces the debugger to activate even if the flag
1463 is false.
1461 is false.
1464 """
1462 """
1465
1463
1466 if not (force or self.call_pdb):
1464 if not (force or self.call_pdb):
1467 return
1465 return
1468
1466
1469 if not hasattr(sys,'last_traceback'):
1467 if not hasattr(sys,'last_traceback'):
1470 error('No traceback has been produced, nothing to debug.')
1468 error('No traceback has been produced, nothing to debug.')
1471 return
1469 return
1472
1470
1473 # use pydb if available
1471 # use pydb if available
1474 if Debugger.has_pydb:
1472 if Debugger.has_pydb:
1475 from pydb import pm
1473 from pydb import pm
1476 else:
1474 else:
1477 # fallback to our internal debugger
1475 # fallback to our internal debugger
1478 pm = lambda : self.InteractiveTB.debugger(force=True)
1476 pm = lambda : self.InteractiveTB.debugger(force=True)
1479 self.history_saving_wrapper(pm)()
1477 self.history_saving_wrapper(pm)()
1480
1478
1481 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1479 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1482 """Display the exception that just occurred.
1480 """Display the exception that just occurred.
1483
1481
1484 If nothing is known about the exception, this is the method which
1482 If nothing is known about the exception, this is the method which
1485 should be used throughout the code for presenting user tracebacks,
1483 should be used throughout the code for presenting user tracebacks,
1486 rather than directly invoking the InteractiveTB object.
1484 rather than directly invoking the InteractiveTB object.
1487
1485
1488 A specific showsyntaxerror() also exists, but this method can take
1486 A specific showsyntaxerror() also exists, but this method can take
1489 care of calling it if needed, so unless you are explicitly catching a
1487 care of calling it if needed, so unless you are explicitly catching a
1490 SyntaxError exception, don't try to analyze the stack manually and
1488 SyntaxError exception, don't try to analyze the stack manually and
1491 simply call this method."""
1489 simply call this method."""
1492
1490
1493
1491
1494 # Though this won't be called by syntax errors in the input line,
1492 # Though this won't be called by syntax errors in the input line,
1495 # there may be SyntaxError cases whith imported code.
1493 # there may be SyntaxError cases whith imported code.
1496
1494
1497
1495
1498 if exc_tuple is None:
1496 if exc_tuple is None:
1499 etype, value, tb = sys.exc_info()
1497 etype, value, tb = sys.exc_info()
1500 else:
1498 else:
1501 etype, value, tb = exc_tuple
1499 etype, value, tb = exc_tuple
1502
1500
1503 if etype is SyntaxError:
1501 if etype is SyntaxError:
1504 self.showsyntaxerror(filename)
1502 self.showsyntaxerror(filename)
1505 else:
1503 else:
1506 # WARNING: these variables are somewhat deprecated and not
1504 # WARNING: these variables are somewhat deprecated and not
1507 # necessarily safe to use in a threaded environment, but tools
1505 # necessarily safe to use in a threaded environment, but tools
1508 # like pdb depend on their existence, so let's set them. If we
1506 # like pdb depend on their existence, so let's set them. If we
1509 # find problems in the field, we'll need to revisit their use.
1507 # find problems in the field, we'll need to revisit their use.
1510 sys.last_type = etype
1508 sys.last_type = etype
1511 sys.last_value = value
1509 sys.last_value = value
1512 sys.last_traceback = tb
1510 sys.last_traceback = tb
1513
1511
1514 if etype in self.custom_exceptions:
1512 if etype in self.custom_exceptions:
1515 self.CustomTB(etype,value,tb)
1513 self.CustomTB(etype,value,tb)
1516 else:
1514 else:
1517 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1515 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1518 if self.InteractiveTB.call_pdb and self.has_readline:
1516 if self.InteractiveTB.call_pdb and self.has_readline:
1519 # pdb mucks up readline, fix it back
1517 # pdb mucks up readline, fix it back
1520 self.set_completer()
1518 self.set_completer()
1521
1519
1522
1520
1523 def mainloop(self,banner=None):
1521 def mainloop(self,banner=None):
1524 """Creates the local namespace and starts the mainloop.
1522 """Creates the local namespace and starts the mainloop.
1525
1523
1526 If an optional banner argument is given, it will override the
1524 If an optional banner argument is given, it will override the
1527 internally created default banner."""
1525 internally created default banner."""
1528
1526
1529 if self.rc.c: # Emulate Python's -c option
1527 if self.rc.c: # Emulate Python's -c option
1530 self.exec_init_cmd()
1528 self.exec_init_cmd()
1531 if banner is None:
1529 if banner is None:
1532 if not self.rc.banner:
1530 if not self.rc.banner:
1533 banner = ''
1531 banner = ''
1534 # banner is string? Use it directly!
1532 # banner is string? Use it directly!
1535 elif isinstance(self.rc.banner,basestring):
1533 elif isinstance(self.rc.banner,basestring):
1536 banner = self.rc.banner
1534 banner = self.rc.banner
1537 else:
1535 else:
1538 banner = self.BANNER+self.banner2
1536 banner = self.BANNER+self.banner2
1539
1537
1540 self.interact(banner)
1538 self.interact(banner)
1541
1539
1542 def exec_init_cmd(self):
1540 def exec_init_cmd(self):
1543 """Execute a command given at the command line.
1541 """Execute a command given at the command line.
1544
1542
1545 This emulates Python's -c option."""
1543 This emulates Python's -c option."""
1546
1544
1547 #sys.argv = ['-c']
1545 #sys.argv = ['-c']
1548 self.push(self.rc.c)
1546 self.push(self.rc.c)
1549
1547
1550 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1548 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1551 """Embeds IPython into a running python program.
1549 """Embeds IPython into a running python program.
1552
1550
1553 Input:
1551 Input:
1554
1552
1555 - header: An optional header message can be specified.
1553 - header: An optional header message can be specified.
1556
1554
1557 - local_ns, global_ns: working namespaces. If given as None, the
1555 - local_ns, global_ns: working namespaces. If given as None, the
1558 IPython-initialized one is updated with __main__.__dict__, so that
1556 IPython-initialized one is updated with __main__.__dict__, so that
1559 program variables become visible but user-specific configuration
1557 program variables become visible but user-specific configuration
1560 remains possible.
1558 remains possible.
1561
1559
1562 - stack_depth: specifies how many levels in the stack to go to
1560 - stack_depth: specifies how many levels in the stack to go to
1563 looking for namespaces (when local_ns and global_ns are None). This
1561 looking for namespaces (when local_ns and global_ns are None). This
1564 allows an intermediate caller to make sure that this function gets
1562 allows an intermediate caller to make sure that this function gets
1565 the namespace from the intended level in the stack. By default (0)
1563 the namespace from the intended level in the stack. By default (0)
1566 it will get its locals and globals from the immediate caller.
1564 it will get its locals and globals from the immediate caller.
1567
1565
1568 Warning: it's possible to use this in a program which is being run by
1566 Warning: it's possible to use this in a program which is being run by
1569 IPython itself (via %run), but some funny things will happen (a few
1567 IPython itself (via %run), but some funny things will happen (a few
1570 globals get overwritten). In the future this will be cleaned up, as
1568 globals get overwritten). In the future this will be cleaned up, as
1571 there is no fundamental reason why it can't work perfectly."""
1569 there is no fundamental reason why it can't work perfectly."""
1572
1570
1573 # Get locals and globals from caller
1571 # Get locals and globals from caller
1574 if local_ns is None or global_ns is None:
1572 if local_ns is None or global_ns is None:
1575 call_frame = sys._getframe(stack_depth).f_back
1573 call_frame = sys._getframe(stack_depth).f_back
1576
1574
1577 if local_ns is None:
1575 if local_ns is None:
1578 local_ns = call_frame.f_locals
1576 local_ns = call_frame.f_locals
1579 if global_ns is None:
1577 if global_ns is None:
1580 global_ns = call_frame.f_globals
1578 global_ns = call_frame.f_globals
1581
1579
1582 # Update namespaces and fire up interpreter
1580 # Update namespaces and fire up interpreter
1583
1581
1584 # The global one is easy, we can just throw it in
1582 # The global one is easy, we can just throw it in
1585 self.user_global_ns = global_ns
1583 self.user_global_ns = global_ns
1586
1584
1587 # but the user/local one is tricky: ipython needs it to store internal
1585 # but the user/local one is tricky: ipython needs it to store internal
1588 # data, but we also need the locals. We'll copy locals in the user
1586 # data, but we also need the locals. We'll copy locals in the user
1589 # one, but will track what got copied so we can delete them at exit.
1587 # one, but will track what got copied so we can delete them at exit.
1590 # This is so that a later embedded call doesn't see locals from a
1588 # This is so that a later embedded call doesn't see locals from a
1591 # previous call (which most likely existed in a separate scope).
1589 # previous call (which most likely existed in a separate scope).
1592 local_varnames = local_ns.keys()
1590 local_varnames = local_ns.keys()
1593 self.user_ns.update(local_ns)
1591 self.user_ns.update(local_ns)
1594
1592
1595 # Patch for global embedding to make sure that things don't overwrite
1593 # Patch for global embedding to make sure that things don't overwrite
1596 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1594 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1597 # FIXME. Test this a bit more carefully (the if.. is new)
1595 # FIXME. Test this a bit more carefully (the if.. is new)
1598 if local_ns is None and global_ns is None:
1596 if local_ns is None and global_ns is None:
1599 self.user_global_ns.update(__main__.__dict__)
1597 self.user_global_ns.update(__main__.__dict__)
1600
1598
1601 # make sure the tab-completer has the correct frame information, so it
1599 # make sure the tab-completer has the correct frame information, so it
1602 # actually completes using the frame's locals/globals
1600 # actually completes using the frame's locals/globals
1603 self.set_completer_frame()
1601 self.set_completer_frame()
1604
1602
1605 # before activating the interactive mode, we need to make sure that
1603 # before activating the interactive mode, we need to make sure that
1606 # all names in the builtin namespace needed by ipython point to
1604 # all names in the builtin namespace needed by ipython point to
1607 # ourselves, and not to other instances.
1605 # ourselves, and not to other instances.
1608 self.add_builtins()
1606 self.add_builtins()
1609
1607
1610 self.interact(header)
1608 self.interact(header)
1611
1609
1612 # now, purge out the user namespace from anything we might have added
1610 # now, purge out the user namespace from anything we might have added
1613 # from the caller's local namespace
1611 # from the caller's local namespace
1614 delvar = self.user_ns.pop
1612 delvar = self.user_ns.pop
1615 for var in local_varnames:
1613 for var in local_varnames:
1616 delvar(var,None)
1614 delvar(var,None)
1617 # and clean builtins we may have overridden
1615 # and clean builtins we may have overridden
1618 self.clean_builtins()
1616 self.clean_builtins()
1619
1617
1620 def interact(self, banner=None):
1618 def interact(self, banner=None):
1621 """Closely emulate the interactive Python console.
1619 """Closely emulate the interactive Python console.
1622
1620
1623 The optional banner argument specify the banner to print
1621 The optional banner argument specify the banner to print
1624 before the first interaction; by default it prints a banner
1622 before the first interaction; by default it prints a banner
1625 similar to the one printed by the real Python interpreter,
1623 similar to the one printed by the real Python interpreter,
1626 followed by the current class name in parentheses (so as not
1624 followed by the current class name in parentheses (so as not
1627 to confuse this with the real interpreter -- since it's so
1625 to confuse this with the real interpreter -- since it's so
1628 close!).
1626 close!).
1629
1627
1630 """
1628 """
1631
1629
1632 if self.exit_now:
1630 if self.exit_now:
1633 # batch run -> do not interact
1631 # batch run -> do not interact
1634 return
1632 return
1635 cprt = 'Type "copyright", "credits" or "license" for more information.'
1633 cprt = 'Type "copyright", "credits" or "license" for more information.'
1636 if banner is None:
1634 if banner is None:
1637 self.write("Python %s on %s\n%s\n(%s)\n" %
1635 self.write("Python %s on %s\n%s\n(%s)\n" %
1638 (sys.version, sys.platform, cprt,
1636 (sys.version, sys.platform, cprt,
1639 self.__class__.__name__))
1637 self.__class__.__name__))
1640 else:
1638 else:
1641 self.write(banner)
1639 self.write(banner)
1642
1640
1643 more = 0
1641 more = 0
1644
1642
1645 # Mark activity in the builtins
1643 # Mark activity in the builtins
1646 __builtin__.__dict__['__IPYTHON__active'] += 1
1644 __builtin__.__dict__['__IPYTHON__active'] += 1
1647
1645
1648 # exit_now is set by a call to %Exit or %Quit
1646 # exit_now is set by a call to %Exit or %Quit
1649 while not self.exit_now:
1647 while not self.exit_now:
1650 if more:
1648 if more:
1651 prompt = self.hooks.generate_prompt(True)
1649 prompt = self.hooks.generate_prompt(True)
1652 if self.autoindent:
1650 if self.autoindent:
1653 self.readline_startup_hook(self.pre_readline)
1651 self.readline_startup_hook(self.pre_readline)
1654 else:
1652 else:
1655 prompt = self.hooks.generate_prompt(False)
1653 prompt = self.hooks.generate_prompt(False)
1656 try:
1654 try:
1657 line = self.raw_input(prompt,more)
1655 line = self.raw_input(prompt,more)
1658 if self.exit_now:
1656 if self.exit_now:
1659 # quick exit on sys.std[in|out] close
1657 # quick exit on sys.std[in|out] close
1660 break
1658 break
1661 if self.autoindent:
1659 if self.autoindent:
1662 self.readline_startup_hook(None)
1660 self.readline_startup_hook(None)
1663 except KeyboardInterrupt:
1661 except KeyboardInterrupt:
1664 self.write('\nKeyboardInterrupt\n')
1662 self.write('\nKeyboardInterrupt\n')
1665 self.resetbuffer()
1663 self.resetbuffer()
1666 # keep cache in sync with the prompt counter:
1664 # keep cache in sync with the prompt counter:
1667 self.outputcache.prompt_count -= 1
1665 self.outputcache.prompt_count -= 1
1668
1666
1669 if self.autoindent:
1667 if self.autoindent:
1670 self.indent_current_nsp = 0
1668 self.indent_current_nsp = 0
1671 more = 0
1669 more = 0
1672 except EOFError:
1670 except EOFError:
1673 if self.autoindent:
1671 if self.autoindent:
1674 self.readline_startup_hook(None)
1672 self.readline_startup_hook(None)
1675 self.write('\n')
1673 self.write('\n')
1676 self.exit()
1674 self.exit()
1677 except bdb.BdbQuit:
1675 except bdb.BdbQuit:
1678 warn('The Python debugger has exited with a BdbQuit exception.\n'
1676 warn('The Python debugger has exited with a BdbQuit exception.\n'
1679 'Because of how pdb handles the stack, it is impossible\n'
1677 'Because of how pdb handles the stack, it is impossible\n'
1680 'for IPython to properly format this particular exception.\n'
1678 'for IPython to properly format this particular exception.\n'
1681 'IPython will resume normal operation.')
1679 'IPython will resume normal operation.')
1682 except:
1680 except:
1683 # exceptions here are VERY RARE, but they can be triggered
1681 # exceptions here are VERY RARE, but they can be triggered
1684 # asynchronously by signal handlers, for example.
1682 # asynchronously by signal handlers, for example.
1685 self.showtraceback()
1683 self.showtraceback()
1686 else:
1684 else:
1687 more = self.push(line)
1685 more = self.push(line)
1688 if (self.SyntaxTB.last_syntax_error and
1686 if (self.SyntaxTB.last_syntax_error and
1689 self.rc.autoedit_syntax):
1687 self.rc.autoedit_syntax):
1690 self.edit_syntax_error()
1688 self.edit_syntax_error()
1691
1689
1692 # We are off again...
1690 # We are off again...
1693 __builtin__.__dict__['__IPYTHON__active'] -= 1
1691 __builtin__.__dict__['__IPYTHON__active'] -= 1
1694
1692
1695 def excepthook(self, etype, value, tb):
1693 def excepthook(self, etype, value, tb):
1696 """One more defense for GUI apps that call sys.excepthook.
1694 """One more defense for GUI apps that call sys.excepthook.
1697
1695
1698 GUI frameworks like wxPython trap exceptions and call
1696 GUI frameworks like wxPython trap exceptions and call
1699 sys.excepthook themselves. I guess this is a feature that
1697 sys.excepthook themselves. I guess this is a feature that
1700 enables them to keep running after exceptions that would
1698 enables them to keep running after exceptions that would
1701 otherwise kill their mainloop. This is a bother for IPython
1699 otherwise kill their mainloop. This is a bother for IPython
1702 which excepts to catch all of the program exceptions with a try:
1700 which excepts to catch all of the program exceptions with a try:
1703 except: statement.
1701 except: statement.
1704
1702
1705 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1703 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1706 any app directly invokes sys.excepthook, it will look to the user like
1704 any app directly invokes sys.excepthook, it will look to the user like
1707 IPython crashed. In order to work around this, we can disable the
1705 IPython crashed. In order to work around this, we can disable the
1708 CrashHandler and replace it with this excepthook instead, which prints a
1706 CrashHandler and replace it with this excepthook instead, which prints a
1709 regular traceback using our InteractiveTB. In this fashion, apps which
1707 regular traceback using our InteractiveTB. In this fashion, apps which
1710 call sys.excepthook will generate a regular-looking exception from
1708 call sys.excepthook will generate a regular-looking exception from
1711 IPython, and the CrashHandler will only be triggered by real IPython
1709 IPython, and the CrashHandler will only be triggered by real IPython
1712 crashes.
1710 crashes.
1713
1711
1714 This hook should be used sparingly, only in places which are not likely
1712 This hook should be used sparingly, only in places which are not likely
1715 to be true IPython errors.
1713 to be true IPython errors.
1716 """
1714 """
1717 self.showtraceback((etype,value,tb),tb_offset=0)
1715 self.showtraceback((etype,value,tb),tb_offset=0)
1718
1716
1719 def expand_aliases(self,fn,rest):
1717 def expand_aliases(self,fn,rest):
1720 """ Expand multiple levels of aliases:
1718 """ Expand multiple levels of aliases:
1721
1719
1722 if:
1720 if:
1723
1721
1724 alias foo bar /tmp
1722 alias foo bar /tmp
1725 alias baz foo
1723 alias baz foo
1726
1724
1727 then:
1725 then:
1728
1726
1729 baz huhhahhei -> bar /tmp huhhahhei
1727 baz huhhahhei -> bar /tmp huhhahhei
1730
1728
1731 """
1729 """
1732 line = fn + " " + rest
1730 line = fn + " " + rest
1733
1731
1734 done = Set()
1732 done = Set()
1735 while 1:
1733 while 1:
1736 pre,fn,rest = self.split_user_input(line, pattern = self.shell_line_split)
1734 pre,fn,rest = self.split_user_input(line, pattern = self.shell_line_split)
1737 # print "!",fn,"!",rest # dbg
1735 # print "!",fn,"!",rest # dbg
1738 if fn in self.alias_table:
1736 if fn in self.alias_table:
1739 if fn in done:
1737 if fn in done:
1740 warn("Cyclic alias definition, repeated '%s'" % fn)
1738 warn("Cyclic alias definition, repeated '%s'" % fn)
1741 return ""
1739 return ""
1742 done.add(fn)
1740 done.add(fn)
1743
1741
1744 l2 = self.transform_alias(fn,rest)
1742 l2 = self.transform_alias(fn,rest)
1745 # dir -> dir
1743 # dir -> dir
1746 # print "alias",line, "->",l2 #dbg
1744 # print "alias",line, "->",l2 #dbg
1747 if l2 == line:
1745 if l2 == line:
1748 break
1746 break
1749 # ls -> ls -F should not recurse forever
1747 # ls -> ls -F should not recurse forever
1750 if l2.split(None,1)[0] == line.split(None,1)[0]:
1748 if l2.split(None,1)[0] == line.split(None,1)[0]:
1751 line = l2
1749 line = l2
1752 break
1750 break
1753
1751
1754 line=l2
1752 line=l2
1755
1753
1756
1754
1757 # print "al expand to",line #dbg
1755 # print "al expand to",line #dbg
1758 else:
1756 else:
1759 break
1757 break
1760
1758
1761 return line
1759 return line
1762
1760
1763 def transform_alias(self, alias,rest=''):
1761 def transform_alias(self, alias,rest=''):
1764 """ Transform alias to system command string.
1762 """ Transform alias to system command string.
1765 """
1763 """
1766 nargs,cmd = self.alias_table[alias]
1764 nargs,cmd = self.alias_table[alias]
1767 if ' ' in cmd and os.path.isfile(cmd):
1765 if ' ' in cmd and os.path.isfile(cmd):
1768 cmd = '"%s"' % cmd
1766 cmd = '"%s"' % cmd
1769
1767
1770 # Expand the %l special to be the user's input line
1768 # Expand the %l special to be the user's input line
1771 if cmd.find('%l') >= 0:
1769 if cmd.find('%l') >= 0:
1772 cmd = cmd.replace('%l',rest)
1770 cmd = cmd.replace('%l',rest)
1773 rest = ''
1771 rest = ''
1774 if nargs==0:
1772 if nargs==0:
1775 # Simple, argument-less aliases
1773 # Simple, argument-less aliases
1776 cmd = '%s %s' % (cmd,rest)
1774 cmd = '%s %s' % (cmd,rest)
1777 else:
1775 else:
1778 # Handle aliases with positional arguments
1776 # Handle aliases with positional arguments
1779 args = rest.split(None,nargs)
1777 args = rest.split(None,nargs)
1780 if len(args)< nargs:
1778 if len(args)< nargs:
1781 error('Alias <%s> requires %s arguments, %s given.' %
1779 error('Alias <%s> requires %s arguments, %s given.' %
1782 (alias,nargs,len(args)))
1780 (alias,nargs,len(args)))
1783 return None
1781 return None
1784 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1782 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1785 # Now call the macro, evaluating in the user's namespace
1783 # Now call the macro, evaluating in the user's namespace
1786 #print 'new command: <%r>' % cmd # dbg
1784 #print 'new command: <%r>' % cmd # dbg
1787 return cmd
1785 return cmd
1788
1786
1789 def call_alias(self,alias,rest=''):
1787 def call_alias(self,alias,rest=''):
1790 """Call an alias given its name and the rest of the line.
1788 """Call an alias given its name and the rest of the line.
1791
1789
1792 This is only used to provide backwards compatibility for users of
1790 This is only used to provide backwards compatibility for users of
1793 ipalias(), use of which is not recommended for anymore."""
1791 ipalias(), use of which is not recommended for anymore."""
1794
1792
1795 # Now call the macro, evaluating in the user's namespace
1793 # Now call the macro, evaluating in the user's namespace
1796 cmd = self.transform_alias(alias, rest)
1794 cmd = self.transform_alias(alias, rest)
1797 try:
1795 try:
1798 self.system(cmd)
1796 self.system(cmd)
1799 except:
1797 except:
1800 self.showtraceback()
1798 self.showtraceback()
1801
1799
1802 def indent_current_str(self):
1800 def indent_current_str(self):
1803 """return the current level of indentation as a string"""
1801 """return the current level of indentation as a string"""
1804 return self.indent_current_nsp * ' '
1802 return self.indent_current_nsp * ' '
1805
1803
1806 def autoindent_update(self,line):
1804 def autoindent_update(self,line):
1807 """Keep track of the indent level."""
1805 """Keep track of the indent level."""
1808
1806
1809 #debugx('line')
1807 #debugx('line')
1810 #debugx('self.indent_current_nsp')
1808 #debugx('self.indent_current_nsp')
1811 if self.autoindent:
1809 if self.autoindent:
1812 print "ind level", self.indent_current_nsp #dbg
1813 if line:
1810 if line:
1814 inisp = num_ini_spaces(line)
1811 inisp = num_ini_spaces(line)
1815 if inisp < self.indent_current_nsp:
1812 if inisp < self.indent_current_nsp:
1816 self.indent_current_nsp = inisp
1813 self.indent_current_nsp = inisp
1817
1814
1818 if line[-1] == ':':
1815 if line[-1] == ':':
1819 self.indent_current_nsp += 4
1816 self.indent_current_nsp += 4
1820 elif dedent_re.match(line):
1817 elif dedent_re.match(line):
1821 self.indent_current_nsp -= 4
1818 self.indent_current_nsp -= 4
1822 else:
1819 else:
1823 self.indent_current_nsp = 0
1820 self.indent_current_nsp = 0
1824
1821
1825 def runlines(self,lines):
1822 def runlines(self,lines):
1826 """Run a string of one or more lines of source.
1823 """Run a string of one or more lines of source.
1827
1824
1828 This method is capable of running a string containing multiple source
1825 This method is capable of running a string containing multiple source
1829 lines, as if they had been entered at the IPython prompt. Since it
1826 lines, as if they had been entered at the IPython prompt. Since it
1830 exposes IPython's processing machinery, the given strings can contain
1827 exposes IPython's processing machinery, the given strings can contain
1831 magic calls (%magic), special shell access (!cmd), etc."""
1828 magic calls (%magic), special shell access (!cmd), etc."""
1832
1829
1833 # We must start with a clean buffer, in case this is run from an
1830 # We must start with a clean buffer, in case this is run from an
1834 # interactive IPython session (via a magic, for example).
1831 # interactive IPython session (via a magic, for example).
1835 self.resetbuffer()
1832 self.resetbuffer()
1836 lines = lines.split('\n')
1833 lines = lines.split('\n')
1837 more = 0
1834 more = 0
1838 for line in lines:
1835 for line in lines:
1839 # skip blank lines so we don't mess up the prompt counter, but do
1836 # skip blank lines so we don't mess up the prompt counter, but do
1840 # NOT skip even a blank line if we are in a code block (more is
1837 # NOT skip even a blank line if we are in a code block (more is
1841 # true)
1838 # true)
1842 if line or more:
1839 if line or more:
1843 more = self.push(self.prefilter(line,more))
1840 more = self.push(self.prefilter(line,more))
1844 # IPython's runsource returns None if there was an error
1841 # IPython's runsource returns None if there was an error
1845 # compiling the code. This allows us to stop processing right
1842 # compiling the code. This allows us to stop processing right
1846 # away, so the user gets the error message at the right place.
1843 # away, so the user gets the error message at the right place.
1847 if more is None:
1844 if more is None:
1848 break
1845 break
1849 # final newline in case the input didn't have it, so that the code
1846 # final newline in case the input didn't have it, so that the code
1850 # actually does get executed
1847 # actually does get executed
1851 if more:
1848 if more:
1852 self.push('\n')
1849 self.push('\n')
1853
1850
1854 def runsource(self, source, filename='<input>', symbol='single'):
1851 def runsource(self, source, filename='<input>', symbol='single'):
1855 """Compile and run some source in the interpreter.
1852 """Compile and run some source in the interpreter.
1856
1853
1857 Arguments are as for compile_command().
1854 Arguments are as for compile_command().
1858
1855
1859 One several things can happen:
1856 One several things can happen:
1860
1857
1861 1) The input is incorrect; compile_command() raised an
1858 1) The input is incorrect; compile_command() raised an
1862 exception (SyntaxError or OverflowError). A syntax traceback
1859 exception (SyntaxError or OverflowError). A syntax traceback
1863 will be printed by calling the showsyntaxerror() method.
1860 will be printed by calling the showsyntaxerror() method.
1864
1861
1865 2) The input is incomplete, and more input is required;
1862 2) The input is incomplete, and more input is required;
1866 compile_command() returned None. Nothing happens.
1863 compile_command() returned None. Nothing happens.
1867
1864
1868 3) The input is complete; compile_command() returned a code
1865 3) The input is complete; compile_command() returned a code
1869 object. The code is executed by calling self.runcode() (which
1866 object. The code is executed by calling self.runcode() (which
1870 also handles run-time exceptions, except for SystemExit).
1867 also handles run-time exceptions, except for SystemExit).
1871
1868
1872 The return value is:
1869 The return value is:
1873
1870
1874 - True in case 2
1871 - True in case 2
1875
1872
1876 - False in the other cases, unless an exception is raised, where
1873 - False in the other cases, unless an exception is raised, where
1877 None is returned instead. This can be used by external callers to
1874 None is returned instead. This can be used by external callers to
1878 know whether to continue feeding input or not.
1875 know whether to continue feeding input or not.
1879
1876
1880 The return value can be used to decide whether to use sys.ps1 or
1877 The return value can be used to decide whether to use sys.ps1 or
1881 sys.ps2 to prompt the next line."""
1878 sys.ps2 to prompt the next line."""
1882
1879
1883 # if the source code has leading blanks, add 'if 1:\n' to it
1880 # if the source code has leading blanks, add 'if 1:\n' to it
1884 # this allows execution of indented pasted code. It is tempting
1881 # this allows execution of indented pasted code. It is tempting
1885 # to add '\n' at the end of source to run commands like ' a=1'
1882 # to add '\n' at the end of source to run commands like ' a=1'
1886 # directly, but this fails for more complicated scenarios
1883 # directly, but this fails for more complicated scenarios
1887 if source[:1] in [' ', '\t']:
1884 if source[:1] in [' ', '\t']:
1888 source = 'if 1:\n%s' % source
1885 source = 'if 1:\n%s' % source
1889
1886
1890 try:
1887 try:
1891 code = self.compile(source,filename,symbol)
1888 code = self.compile(source,filename,symbol)
1892 except (OverflowError, SyntaxError, ValueError):
1889 except (OverflowError, SyntaxError, ValueError):
1893 # Case 1
1890 # Case 1
1894 self.showsyntaxerror(filename)
1891 self.showsyntaxerror(filename)
1895 return None
1892 return None
1896
1893
1897 if code is None:
1894 if code is None:
1898 # Case 2
1895 # Case 2
1899 return True
1896 return True
1900
1897
1901 # Case 3
1898 # Case 3
1902 # We store the code object so that threaded shells and
1899 # We store the code object so that threaded shells and
1903 # custom exception handlers can access all this info if needed.
1900 # custom exception handlers can access all this info if needed.
1904 # The source corresponding to this can be obtained from the
1901 # The source corresponding to this can be obtained from the
1905 # buffer attribute as '\n'.join(self.buffer).
1902 # buffer attribute as '\n'.join(self.buffer).
1906 self.code_to_run = code
1903 self.code_to_run = code
1907 # now actually execute the code object
1904 # now actually execute the code object
1908 if self.runcode(code) == 0:
1905 if self.runcode(code) == 0:
1909 return False
1906 return False
1910 else:
1907 else:
1911 return None
1908 return None
1912
1909
1913 def runcode(self,code_obj):
1910 def runcode(self,code_obj):
1914 """Execute a code object.
1911 """Execute a code object.
1915
1912
1916 When an exception occurs, self.showtraceback() is called to display a
1913 When an exception occurs, self.showtraceback() is called to display a
1917 traceback.
1914 traceback.
1918
1915
1919 Return value: a flag indicating whether the code to be run completed
1916 Return value: a flag indicating whether the code to be run completed
1920 successfully:
1917 successfully:
1921
1918
1922 - 0: successful execution.
1919 - 0: successful execution.
1923 - 1: an error occurred.
1920 - 1: an error occurred.
1924 """
1921 """
1925
1922
1926 # Set our own excepthook in case the user code tries to call it
1923 # Set our own excepthook in case the user code tries to call it
1927 # directly, so that the IPython crash handler doesn't get triggered
1924 # directly, so that the IPython crash handler doesn't get triggered
1928 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1925 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1929
1926
1930 # we save the original sys.excepthook in the instance, in case config
1927 # we save the original sys.excepthook in the instance, in case config
1931 # code (such as magics) needs access to it.
1928 # code (such as magics) needs access to it.
1932 self.sys_excepthook = old_excepthook
1929 self.sys_excepthook = old_excepthook
1933 outflag = 1 # happens in more places, so it's easier as default
1930 outflag = 1 # happens in more places, so it's easier as default
1934 try:
1931 try:
1935 try:
1932 try:
1936 # Embedded instances require separate global/local namespaces
1933 # Embedded instances require separate global/local namespaces
1937 # so they can see both the surrounding (local) namespace and
1934 # so they can see both the surrounding (local) namespace and
1938 # the module-level globals when called inside another function.
1935 # the module-level globals when called inside another function.
1939 if self.embedded:
1936 if self.embedded:
1940 exec code_obj in self.user_global_ns, self.user_ns
1937 exec code_obj in self.user_global_ns, self.user_ns
1941 # Normal (non-embedded) instances should only have a single
1938 # Normal (non-embedded) instances should only have a single
1942 # namespace for user code execution, otherwise functions won't
1939 # namespace for user code execution, otherwise functions won't
1943 # see interactive top-level globals.
1940 # see interactive top-level globals.
1944 else:
1941 else:
1945 exec code_obj in self.user_ns
1942 exec code_obj in self.user_ns
1946 finally:
1943 finally:
1947 # Reset our crash handler in place
1944 # Reset our crash handler in place
1948 sys.excepthook = old_excepthook
1945 sys.excepthook = old_excepthook
1949 except SystemExit:
1946 except SystemExit:
1950 self.resetbuffer()
1947 self.resetbuffer()
1951 self.showtraceback()
1948 self.showtraceback()
1952 warn("Type %exit or %quit to exit IPython "
1949 warn("Type %exit or %quit to exit IPython "
1953 "(%Exit or %Quit do so unconditionally).",level=1)
1950 "(%Exit or %Quit do so unconditionally).",level=1)
1954 except self.custom_exceptions:
1951 except self.custom_exceptions:
1955 etype,value,tb = sys.exc_info()
1952 etype,value,tb = sys.exc_info()
1956 self.CustomTB(etype,value,tb)
1953 self.CustomTB(etype,value,tb)
1957 except:
1954 except:
1958 self.showtraceback()
1955 self.showtraceback()
1959 else:
1956 else:
1960 outflag = 0
1957 outflag = 0
1961 if softspace(sys.stdout, 0):
1958 if softspace(sys.stdout, 0):
1962 print
1959 print
1963 # Flush out code object which has been run (and source)
1960 # Flush out code object which has been run (and source)
1964 self.code_to_run = None
1961 self.code_to_run = None
1965 return outflag
1962 return outflag
1966
1963
1967 def push(self, line):
1964 def push(self, line):
1968 """Push a line to the interpreter.
1965 """Push a line to the interpreter.
1969
1966
1970 The line should not have a trailing newline; it may have
1967 The line should not have a trailing newline; it may have
1971 internal newlines. The line is appended to a buffer and the
1968 internal newlines. The line is appended to a buffer and the
1972 interpreter's runsource() method is called with the
1969 interpreter's runsource() method is called with the
1973 concatenated contents of the buffer as source. If this
1970 concatenated contents of the buffer as source. If this
1974 indicates that the command was executed or invalid, the buffer
1971 indicates that the command was executed or invalid, the buffer
1975 is reset; otherwise, the command is incomplete, and the buffer
1972 is reset; otherwise, the command is incomplete, and the buffer
1976 is left as it was after the line was appended. The return
1973 is left as it was after the line was appended. The return
1977 value is 1 if more input is required, 0 if the line was dealt
1974 value is 1 if more input is required, 0 if the line was dealt
1978 with in some way (this is the same as runsource()).
1975 with in some way (this is the same as runsource()).
1979 """
1976 """
1980
1977
1981 # autoindent management should be done here, and not in the
1978 # autoindent management should be done here, and not in the
1982 # interactive loop, since that one is only seen by keyboard input. We
1979 # interactive loop, since that one is only seen by keyboard input. We
1983 # need this done correctly even for code run via runlines (which uses
1980 # need this done correctly even for code run via runlines (which uses
1984 # push).
1981 # push).
1985
1982
1986 #print 'push line: <%s>' % line # dbg
1983 #print 'push line: <%s>' % line # dbg
1987 for subline in line.splitlines():
1984 for subline in line.splitlines():
1988 self.autoindent_update(subline)
1985 self.autoindent_update(subline)
1989 self.buffer.append(line)
1986 self.buffer.append(line)
1990 more = self.runsource('\n'.join(self.buffer), self.filename)
1987 more = self.runsource('\n'.join(self.buffer), self.filename)
1991 if not more:
1988 if not more:
1992 self.resetbuffer()
1989 self.resetbuffer()
1993 return more
1990 return more
1994
1991
1995 def resetbuffer(self):
1992 def resetbuffer(self):
1996 """Reset the input buffer."""
1993 """Reset the input buffer."""
1997 self.buffer[:] = []
1994 self.buffer[:] = []
1998
1995
1999 def raw_input(self,prompt='',continue_prompt=False):
1996 def raw_input(self,prompt='',continue_prompt=False):
2000 """Write a prompt and read a line.
1997 """Write a prompt and read a line.
2001
1998
2002 The returned line does not include the trailing newline.
1999 The returned line does not include the trailing newline.
2003 When the user enters the EOF key sequence, EOFError is raised.
2000 When the user enters the EOF key sequence, EOFError is raised.
2004
2001
2005 Optional inputs:
2002 Optional inputs:
2006
2003
2007 - prompt(''): a string to be printed to prompt the user.
2004 - prompt(''): a string to be printed to prompt the user.
2008
2005
2009 - continue_prompt(False): whether this line is the first one or a
2006 - continue_prompt(False): whether this line is the first one or a
2010 continuation in a sequence of inputs.
2007 continuation in a sequence of inputs.
2011 """
2008 """
2012
2009
2013 # Code run by the user may have modified the readline completer state.
2010 # Code run by the user may have modified the readline completer state.
2014 # We must ensure that our completer is back in place.
2011 # We must ensure that our completer is back in place.
2015 if self.has_readline:
2012 if self.has_readline:
2016 self.set_completer()
2013 self.set_completer()
2017
2014
2018 try:
2015 try:
2019 line = raw_input_original(prompt).decode(self.stdin_encoding)
2016 line = raw_input_original(prompt).decode(self.stdin_encoding)
2020 except ValueError:
2017 except ValueError:
2021 warn("\n********\nYou or a %run:ed script called sys.stdin.close()"
2018 warn("\n********\nYou or a %run:ed script called sys.stdin.close()"
2022 " or sys.stdout.close()!\nExiting IPython!")
2019 " or sys.stdout.close()!\nExiting IPython!")
2023 self.exit_now = True
2020 self.exit_now = True
2024 return ""
2021 return ""
2025
2022
2026 # Try to be reasonably smart about not re-indenting pasted input more
2023 # Try to be reasonably smart about not re-indenting pasted input more
2027 # than necessary. We do this by trimming out the auto-indent initial
2024 # than necessary. We do this by trimming out the auto-indent initial
2028 # spaces, if the user's actual input started itself with whitespace.
2025 # spaces, if the user's actual input started itself with whitespace.
2029 #debugx('self.buffer[-1]')
2026 #debugx('self.buffer[-1]')
2030
2027
2031 if self.autoindent:
2028 if self.autoindent:
2032 if num_ini_spaces(line) > self.indent_current_nsp:
2029 if num_ini_spaces(line) > self.indent_current_nsp:
2033 line = line[self.indent_current_nsp:]
2030 line = line[self.indent_current_nsp:]
2034 self.indent_current_nsp = 0
2031 self.indent_current_nsp = 0
2035
2032
2036 # store the unfiltered input before the user has any chance to modify
2033 # store the unfiltered input before the user has any chance to modify
2037 # it.
2034 # it.
2038 if line.strip():
2035 if line.strip():
2039 if continue_prompt:
2036 if continue_prompt:
2040 self.input_hist_raw[-1] += '%s\n' % line
2037 self.input_hist_raw[-1] += '%s\n' % line
2041 if self.has_readline: # and some config option is set?
2038 if self.has_readline: # and some config option is set?
2042 try:
2039 try:
2043 histlen = self.readline.get_current_history_length()
2040 histlen = self.readline.get_current_history_length()
2044 newhist = self.input_hist_raw[-1].rstrip()
2041 newhist = self.input_hist_raw[-1].rstrip()
2045 self.readline.remove_history_item(histlen-1)
2042 self.readline.remove_history_item(histlen-1)
2046 self.readline.replace_history_item(histlen-2,newhist)
2043 self.readline.replace_history_item(histlen-2,newhist)
2047 except AttributeError:
2044 except AttributeError:
2048 pass # re{move,place}_history_item are new in 2.4.
2045 pass # re{move,place}_history_item are new in 2.4.
2049 else:
2046 else:
2050 self.input_hist_raw.append('%s\n' % line)
2047 self.input_hist_raw.append('%s\n' % line)
2051
2048
2052 try:
2049 try:
2053 lineout = self.prefilter(line,continue_prompt)
2050 lineout = self.prefilter(line,continue_prompt)
2054 except:
2051 except:
2055 # blanket except, in case a user-defined prefilter crashes, so it
2052 # blanket except, in case a user-defined prefilter crashes, so it
2056 # can't take all of ipython with it.
2053 # can't take all of ipython with it.
2057 self.showtraceback()
2054 self.showtraceback()
2058 return ''
2055 return ''
2059 else:
2056 else:
2060 return lineout
2057 return lineout
2061
2058
2062 def split_user_input(self,line, pattern = None):
2059 def split_user_input(self,line, pattern = None):
2063 """Split user input into pre-char, function part and rest."""
2060 """Split user input into pre-char, function part and rest."""
2064
2061
2065 if pattern is None:
2062 if pattern is None:
2066 pattern = self.line_split
2063 pattern = self.line_split
2067
2064
2068 lsplit = pattern.match(line)
2065 lsplit = pattern.match(line)
2069 if lsplit is None: # no regexp match returns None
2066 if lsplit is None: # no regexp match returns None
2070 #print "match failed for line '%s'" % line # dbg
2067 #print "match failed for line '%s'" % line # dbg
2071 try:
2068 try:
2072 iFun,theRest = line.split(None,1)
2069 iFun,theRest = line.split(None,1)
2073 except ValueError:
2070 except ValueError:
2074 #print "split failed for line '%s'" % line # dbg
2071 #print "split failed for line '%s'" % line # dbg
2075 iFun,theRest = line,''
2072 iFun,theRest = line,''
2076 pre = re.match('^(\s*)(.*)',line).groups()[0]
2073 pre = re.match('^(\s*)(.*)',line).groups()[0]
2077 else:
2074 else:
2078 pre,iFun,theRest = lsplit.groups()
2075 pre,iFun,theRest = lsplit.groups()
2079
2076
2080 # iFun has to be a valid python identifier, so it better be only pure
2077 # iFun has to be a valid python identifier, so it better be only pure
2081 #ascii, no unicode:
2078 #ascii, no unicode:
2082 try:
2079 try:
2083 iFun = iFun.encode('ascii')
2080 iFun = iFun.encode('ascii')
2084 except UnicodeEncodeError:
2081 except UnicodeEncodeError:
2085 theRest = iFun+u' '+theRest
2082 theRest = iFun+u' '+theRest
2086 iFun = u''
2083 iFun = u''
2087
2084
2088 #print 'line:<%s>' % line # dbg
2085 #print 'line:<%s>' % line # dbg
2089 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
2086 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
2090 return pre,iFun.strip(),theRest
2087 return pre,iFun.strip(),theRest
2091
2088
2092 # THIS VERSION IS BROKEN!!! It was intended to prevent spurious attribute
2089 # THIS VERSION IS BROKEN!!! It was intended to prevent spurious attribute
2093 # accesses with a more stringent check of inputs, but it introduced other
2090 # accesses with a more stringent check of inputs, but it introduced other
2094 # bugs. Disable it for now until I can properly fix it.
2091 # bugs. Disable it for now until I can properly fix it.
2095 def split_user_inputBROKEN(self,line):
2092 def split_user_inputBROKEN(self,line):
2096 """Split user input into pre-char, function part and rest."""
2093 """Split user input into pre-char, function part and rest."""
2097
2094
2098 lsplit = self.line_split.match(line)
2095 lsplit = self.line_split.match(line)
2099 if lsplit is None: # no regexp match returns None
2096 if lsplit is None: # no regexp match returns None
2100 lsplit = self.line_split_fallback.match(line)
2097 lsplit = self.line_split_fallback.match(line)
2101
2098
2102 #pre,iFun,theRest = lsplit.groups() # dbg
2099 #pre,iFun,theRest = lsplit.groups() # dbg
2103 #print 'line:<%s>' % line # dbg
2100 #print 'line:<%s>' % line # dbg
2104 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
2101 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
2105 #return pre,iFun.strip(),theRest # dbg
2102 #return pre,iFun.strip(),theRest # dbg
2106
2103
2107 return lsplit.groups()
2104 return lsplit.groups()
2108
2105
2109 def _prefilter(self, line, continue_prompt):
2106 def _prefilter(self, line, continue_prompt):
2110 """Calls different preprocessors, depending on the form of line."""
2107 """Calls different preprocessors, depending on the form of line."""
2111
2108
2112 # All handlers *must* return a value, even if it's blank ('').
2109 # All handlers *must* return a value, even if it's blank ('').
2113
2110
2114 # Lines are NOT logged here. Handlers should process the line as
2111 # Lines are NOT logged here. Handlers should process the line as
2115 # needed, update the cache AND log it (so that the input cache array
2112 # needed, update the cache AND log it (so that the input cache array
2116 # stays synced).
2113 # stays synced).
2117
2114
2118 # This function is _very_ delicate, and since it's also the one which
2115 # This function is _very_ delicate, and since it's also the one which
2119 # determines IPython's response to user input, it must be as efficient
2116 # determines IPython's response to user input, it must be as efficient
2120 # as possible. For this reason it has _many_ returns in it, trying
2117 # as possible. For this reason it has _many_ returns in it, trying
2121 # always to exit as quickly as it can figure out what it needs to do.
2118 # always to exit as quickly as it can figure out what it needs to do.
2122
2119
2123 # This function is the main responsible for maintaining IPython's
2120 # This function is the main responsible for maintaining IPython's
2124 # behavior respectful of Python's semantics. So be _very_ careful if
2121 # behavior respectful of Python's semantics. So be _very_ careful if
2125 # making changes to anything here.
2122 # making changes to anything here.
2126
2123
2127 #.....................................................................
2124 #.....................................................................
2128 # Code begins
2125 # Code begins
2129
2126
2130 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
2127 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
2131
2128
2132 # save the line away in case we crash, so the post-mortem handler can
2129 # save the line away in case we crash, so the post-mortem handler can
2133 # record it
2130 # record it
2134 self._last_input_line = line
2131 self._last_input_line = line
2135
2132
2136 #print '***line: <%s>' % line # dbg
2133 #print '***line: <%s>' % line # dbg
2137
2134
2138 # the input history needs to track even empty lines
2135 # the input history needs to track even empty lines
2139 stripped = line.strip()
2136 stripped = line.strip()
2140
2137
2141 if not stripped:
2138 if not stripped:
2142 if not continue_prompt:
2139 if not continue_prompt:
2143 self.outputcache.prompt_count -= 1
2140 self.outputcache.prompt_count -= 1
2144 return self.handle_normal(line,continue_prompt)
2141 return self.handle_normal(line,continue_prompt)
2145 #return self.handle_normal('',continue_prompt)
2142 #return self.handle_normal('',continue_prompt)
2146
2143
2147 # print '***cont',continue_prompt # dbg
2144 # print '***cont',continue_prompt # dbg
2148 # special handlers are only allowed for single line statements
2145 # special handlers are only allowed for single line statements
2149 if continue_prompt and not self.rc.multi_line_specials:
2146 if continue_prompt and not self.rc.multi_line_specials:
2150 return self.handle_normal(line,continue_prompt)
2147 return self.handle_normal(line,continue_prompt)
2151
2148
2152
2149
2153 # For the rest, we need the structure of the input
2150 # For the rest, we need the structure of the input
2154 pre,iFun,theRest = self.split_user_input(line)
2151 pre,iFun,theRest = self.split_user_input(line)
2155
2152
2156 # See whether any pre-existing handler can take care of it
2153 # See whether any pre-existing handler can take care of it
2157
2154
2158 rewritten = self.hooks.input_prefilter(stripped)
2155 rewritten = self.hooks.input_prefilter(stripped)
2159 if rewritten != stripped: # ok, some prefilter did something
2156 if rewritten != stripped: # ok, some prefilter did something
2160 rewritten = pre + rewritten # add indentation
2157 rewritten = pre + rewritten # add indentation
2161 return self.handle_normal(rewritten)
2158 return self.handle_normal(rewritten)
2162
2159
2163 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2160 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2164
2161
2165 # Next, check if we can automatically execute this thing
2162 # Next, check if we can automatically execute this thing
2166
2163
2167 # Allow ! in multi-line statements if multi_line_specials is on:
2164 # Allow ! in multi-line statements if multi_line_specials is on:
2168 if continue_prompt and self.rc.multi_line_specials and \
2165 if continue_prompt and self.rc.multi_line_specials and \
2169 iFun.startswith(self.ESC_SHELL):
2166 iFun.startswith(self.ESC_SHELL):
2170 return self.handle_shell_escape(line,continue_prompt,
2167 return self.handle_shell_escape(line,continue_prompt,
2171 pre=pre,iFun=iFun,
2168 pre=pre,iFun=iFun,
2172 theRest=theRest)
2169 theRest=theRest)
2173
2170
2174 # First check for explicit escapes in the last/first character
2171 # First check for explicit escapes in the last/first character
2175 handler = None
2172 handler = None
2176 if line[-1] == self.ESC_HELP and line[0] != self.ESC_SHELL:
2173 if line[-1] == self.ESC_HELP and line[0] != self.ESC_SHELL:
2177 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
2174 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
2178 if handler is None:
2175 if handler is None:
2179 # look at the first character of iFun, NOT of line, so we skip
2176 # look at the first character of iFun, NOT of line, so we skip
2180 # leading whitespace in multiline input
2177 # leading whitespace in multiline input
2181 handler = self.esc_handlers.get(iFun[0:1])
2178 handler = self.esc_handlers.get(iFun[0:1])
2182 if handler is not None:
2179 if handler is not None:
2183 return handler(line,continue_prompt,pre,iFun,theRest)
2180 return handler(line,continue_prompt,pre,iFun,theRest)
2184 # Emacs ipython-mode tags certain input lines
2181 # Emacs ipython-mode tags certain input lines
2185 if line.endswith('# PYTHON-MODE'):
2182 if line.endswith('# PYTHON-MODE'):
2186 return self.handle_emacs(line,continue_prompt)
2183 return self.handle_emacs(line,continue_prompt)
2187
2184
2188 # Let's try to find if the input line is a magic fn
2185 # Let's try to find if the input line is a magic fn
2189 oinfo = None
2186 oinfo = None
2190 if hasattr(self,'magic_'+iFun):
2187 if hasattr(self,'magic_'+iFun):
2191 # WARNING: _ofind uses getattr(), so it can consume generators and
2188 # WARNING: _ofind uses getattr(), so it can consume generators and
2192 # cause other side effects.
2189 # cause other side effects.
2193 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2190 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2194 if oinfo['ismagic']:
2191 if oinfo['ismagic']:
2195 # Be careful not to call magics when a variable assignment is
2192 # Be careful not to call magics when a variable assignment is
2196 # being made (ls='hi', for example)
2193 # being made (ls='hi', for example)
2197 if self.rc.automagic and \
2194 if self.rc.automagic and \
2198 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
2195 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
2199 (self.rc.multi_line_specials or not continue_prompt):
2196 (self.rc.multi_line_specials or not continue_prompt):
2200 return self.handle_magic(line,continue_prompt,
2197 return self.handle_magic(line,continue_prompt,
2201 pre,iFun,theRest)
2198 pre,iFun,theRest)
2202 else:
2199 else:
2203 return self.handle_normal(line,continue_prompt)
2200 return self.handle_normal(line,continue_prompt)
2204
2201
2205 # If the rest of the line begins with an (in)equality, assginment or
2202 # If the rest of the line begins with an (in)equality, assginment or
2206 # function call, we should not call _ofind but simply execute it.
2203 # function call, we should not call _ofind but simply execute it.
2207 # This avoids spurious geattr() accesses on objects upon assignment.
2204 # This avoids spurious geattr() accesses on objects upon assignment.
2208 #
2205 #
2209 # It also allows users to assign to either alias or magic names true
2206 # It also allows users to assign to either alias or magic names true
2210 # python variables (the magic/alias systems always take second seat to
2207 # python variables (the magic/alias systems always take second seat to
2211 # true python code).
2208 # true python code).
2212 if theRest and theRest[0] in '!=()':
2209 if theRest and theRest[0] in '!=()':
2213 return self.handle_normal(line,continue_prompt)
2210 return self.handle_normal(line,continue_prompt)
2214
2211
2215 if oinfo is None:
2212 if oinfo is None:
2216 # let's try to ensure that _oinfo is ONLY called when autocall is
2213 # let's try to ensure that _oinfo is ONLY called when autocall is
2217 # on. Since it has inevitable potential side effects, at least
2214 # on. Since it has inevitable potential side effects, at least
2218 # having autocall off should be a guarantee to the user that no
2215 # having autocall off should be a guarantee to the user that no
2219 # weird things will happen.
2216 # weird things will happen.
2220
2217
2221 if self.rc.autocall:
2218 if self.rc.autocall:
2222 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2219 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2223 else:
2220 else:
2224 # in this case, all that's left is either an alias or
2221 # in this case, all that's left is either an alias or
2225 # processing the line normally.
2222 # processing the line normally.
2226 if iFun in self.alias_table:
2223 if iFun in self.alias_table:
2227 # if autocall is off, by not running _ofind we won't know
2224 # if autocall is off, by not running _ofind we won't know
2228 # whether the given name may also exist in one of the
2225 # whether the given name may also exist in one of the
2229 # user's namespace. At this point, it's best to do a
2226 # user's namespace. At this point, it's best to do a
2230 # quick check just to be sure that we don't let aliases
2227 # quick check just to be sure that we don't let aliases
2231 # shadow variables.
2228 # shadow variables.
2232 head = iFun.split('.',1)[0]
2229 head = iFun.split('.',1)[0]
2233 if head in self.user_ns or head in self.internal_ns \
2230 if head in self.user_ns or head in self.internal_ns \
2234 or head in __builtin__.__dict__:
2231 or head in __builtin__.__dict__:
2235 return self.handle_normal(line,continue_prompt)
2232 return self.handle_normal(line,continue_prompt)
2236 else:
2233 else:
2237 return self.handle_alias(line,continue_prompt,
2234 return self.handle_alias(line,continue_prompt,
2238 pre,iFun,theRest)
2235 pre,iFun,theRest)
2239
2236
2240 else:
2237 else:
2241 return self.handle_normal(line,continue_prompt)
2238 return self.handle_normal(line,continue_prompt)
2242
2239
2243 if not oinfo['found']:
2240 if not oinfo['found']:
2244 return self.handle_normal(line,continue_prompt)
2241 return self.handle_normal(line,continue_prompt)
2245 else:
2242 else:
2246 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2243 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2247 if oinfo['isalias']:
2244 if oinfo['isalias']:
2248 return self.handle_alias(line,continue_prompt,
2245 return self.handle_alias(line,continue_prompt,
2249 pre,iFun,theRest)
2246 pre,iFun,theRest)
2250
2247
2251 if (self.rc.autocall
2248 if (self.rc.autocall
2252 and
2249 and
2253 (
2250 (
2254 #only consider exclusion re if not "," or ";" autoquoting
2251 #only consider exclusion re if not "," or ";" autoquoting
2255 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
2252 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
2256 or pre == self.ESC_PAREN) or
2253 or pre == self.ESC_PAREN) or
2257 (not self.re_exclude_auto.match(theRest)))
2254 (not self.re_exclude_auto.match(theRest)))
2258 and
2255 and
2259 self.re_fun_name.match(iFun) and
2256 self.re_fun_name.match(iFun) and
2260 callable(oinfo['obj'])) :
2257 callable(oinfo['obj'])) :
2261 #print 'going auto' # dbg
2258 #print 'going auto' # dbg
2262 return self.handle_auto(line,continue_prompt,
2259 return self.handle_auto(line,continue_prompt,
2263 pre,iFun,theRest,oinfo['obj'])
2260 pre,iFun,theRest,oinfo['obj'])
2264 else:
2261 else:
2265 #print 'was callable?', callable(oinfo['obj']) # dbg
2262 #print 'was callable?', callable(oinfo['obj']) # dbg
2266 return self.handle_normal(line,continue_prompt)
2263 return self.handle_normal(line,continue_prompt)
2267
2264
2268 # If we get here, we have a normal Python line. Log and return.
2265 # If we get here, we have a normal Python line. Log and return.
2269 return self.handle_normal(line,continue_prompt)
2266 return self.handle_normal(line,continue_prompt)
2270
2267
2271 def _prefilter_dumb(self, line, continue_prompt):
2268 def _prefilter_dumb(self, line, continue_prompt):
2272 """simple prefilter function, for debugging"""
2269 """simple prefilter function, for debugging"""
2273 return self.handle_normal(line,continue_prompt)
2270 return self.handle_normal(line,continue_prompt)
2274
2271
2275
2272
2276 def multiline_prefilter(self, line, continue_prompt):
2273 def multiline_prefilter(self, line, continue_prompt):
2277 """ Run _prefilter for each line of input
2274 """ Run _prefilter for each line of input
2278
2275
2279 Covers cases where there are multiple lines in the user entry,
2276 Covers cases where there are multiple lines in the user entry,
2280 which is the case when the user goes back to a multiline history
2277 which is the case when the user goes back to a multiline history
2281 entry and presses enter.
2278 entry and presses enter.
2282
2279
2283 """
2280 """
2284 out = []
2281 out = []
2285 for l in line.rstrip('\n').split('\n'):
2282 for l in line.rstrip('\n').split('\n'):
2286 out.append(self._prefilter(l, continue_prompt))
2283 out.append(self._prefilter(l, continue_prompt))
2287 return '\n'.join(out)
2284 return '\n'.join(out)
2288
2285
2289 # Set the default prefilter() function (this can be user-overridden)
2286 # Set the default prefilter() function (this can be user-overridden)
2290 prefilter = multiline_prefilter
2287 prefilter = multiline_prefilter
2291
2288
2292 def handle_normal(self,line,continue_prompt=None,
2289 def handle_normal(self,line,continue_prompt=None,
2293 pre=None,iFun=None,theRest=None):
2290 pre=None,iFun=None,theRest=None):
2294 """Handle normal input lines. Use as a template for handlers."""
2291 """Handle normal input lines. Use as a template for handlers."""
2295
2292
2296 # With autoindent on, we need some way to exit the input loop, and I
2293 # With autoindent on, we need some way to exit the input loop, and I
2297 # don't want to force the user to have to backspace all the way to
2294 # don't want to force the user to have to backspace all the way to
2298 # clear the line. The rule will be in this case, that either two
2295 # clear the line. The rule will be in this case, that either two
2299 # lines of pure whitespace in a row, or a line of pure whitespace but
2296 # lines of pure whitespace in a row, or a line of pure whitespace but
2300 # of a size different to the indent level, will exit the input loop.
2297 # of a size different to the indent level, will exit the input loop.
2301
2298
2302 if (continue_prompt and self.autoindent and line.isspace() and
2299 if (continue_prompt and self.autoindent and line.isspace() and
2303 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2300 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2304 (self.buffer[-1]).isspace() )):
2301 (self.buffer[-1]).isspace() )):
2305 line = ''
2302 line = ''
2306
2303
2307 self.log(line,line,continue_prompt)
2304 self.log(line,line,continue_prompt)
2308 return line
2305 return line
2309
2306
2310 def handle_alias(self,line,continue_prompt=None,
2307 def handle_alias(self,line,continue_prompt=None,
2311 pre=None,iFun=None,theRest=None):
2308 pre=None,iFun=None,theRest=None):
2312 """Handle alias input lines. """
2309 """Handle alias input lines. """
2313
2310
2314 # pre is needed, because it carries the leading whitespace. Otherwise
2311 # pre is needed, because it carries the leading whitespace. Otherwise
2315 # aliases won't work in indented sections.
2312 # aliases won't work in indented sections.
2316 transformed = self.expand_aliases(iFun, theRest)
2313 transformed = self.expand_aliases(iFun, theRest)
2317 line_out = '%s_ip.system(%s)' % (pre, make_quoted_expr( transformed ))
2314 line_out = '%s_ip.system(%s)' % (pre, make_quoted_expr( transformed ))
2318 self.log(line,line_out,continue_prompt)
2315 self.log(line,line_out,continue_prompt)
2319 #print 'line out:',line_out # dbg
2316 #print 'line out:',line_out # dbg
2320 return line_out
2317 return line_out
2321
2318
2322 def handle_shell_escape(self, line, continue_prompt=None,
2319 def handle_shell_escape(self, line, continue_prompt=None,
2323 pre=None,iFun=None,theRest=None):
2320 pre=None,iFun=None,theRest=None):
2324 """Execute the line in a shell, empty return value"""
2321 """Execute the line in a shell, empty return value"""
2325
2322
2326 #print 'line in :', `line` # dbg
2323 #print 'line in :', `line` # dbg
2327 # Example of a special handler. Others follow a similar pattern.
2324 # Example of a special handler. Others follow a similar pattern.
2328 if line.lstrip().startswith('!!'):
2325 if line.lstrip().startswith('!!'):
2329 # rewrite iFun/theRest to properly hold the call to %sx and
2326 # rewrite iFun/theRest to properly hold the call to %sx and
2330 # the actual command to be executed, so handle_magic can work
2327 # the actual command to be executed, so handle_magic can work
2331 # correctly
2328 # correctly
2332 theRest = '%s %s' % (iFun[2:],theRest)
2329 theRest = '%s %s' % (iFun[2:],theRest)
2333 iFun = 'sx'
2330 iFun = 'sx'
2334 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2331 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2335 line.lstrip()[2:]),
2332 line.lstrip()[2:]),
2336 continue_prompt,pre,iFun,theRest)
2333 continue_prompt,pre,iFun,theRest)
2337 else:
2334 else:
2338 cmd=line.lstrip().lstrip('!')
2335 cmd=line.lstrip().lstrip('!')
2339 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2336 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2340 # update cache/log and return
2337 # update cache/log and return
2341 self.log(line,line_out,continue_prompt)
2338 self.log(line,line_out,continue_prompt)
2342 return line_out
2339 return line_out
2343
2340
2344 def handle_magic(self, line, continue_prompt=None,
2341 def handle_magic(self, line, continue_prompt=None,
2345 pre=None,iFun=None,theRest=None):
2342 pre=None,iFun=None,theRest=None):
2346 """Execute magic functions."""
2343 """Execute magic functions."""
2347
2344
2348
2345
2349 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2346 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2350 self.log(line,cmd,continue_prompt)
2347 self.log(line,cmd,continue_prompt)
2351 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2348 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2352 return cmd
2349 return cmd
2353
2350
2354 def handle_auto(self, line, continue_prompt=None,
2351 def handle_auto(self, line, continue_prompt=None,
2355 pre=None,iFun=None,theRest=None,obj=None):
2352 pre=None,iFun=None,theRest=None,obj=None):
2356 """Hande lines which can be auto-executed, quoting if requested."""
2353 """Hande lines which can be auto-executed, quoting if requested."""
2357
2354
2358 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2355 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2359
2356
2360 # This should only be active for single-line input!
2357 # This should only be active for single-line input!
2361 if continue_prompt:
2358 if continue_prompt:
2362 self.log(line,line,continue_prompt)
2359 self.log(line,line,continue_prompt)
2363 return line
2360 return line
2364
2361
2365 auto_rewrite = True
2362 auto_rewrite = True
2366
2363
2367 if pre == self.ESC_QUOTE:
2364 if pre == self.ESC_QUOTE:
2368 # Auto-quote splitting on whitespace
2365 # Auto-quote splitting on whitespace
2369 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2366 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2370 elif pre == self.ESC_QUOTE2:
2367 elif pre == self.ESC_QUOTE2:
2371 # Auto-quote whole string
2368 # Auto-quote whole string
2372 newcmd = '%s("%s")' % (iFun,theRest)
2369 newcmd = '%s("%s")' % (iFun,theRest)
2373 elif pre == self.ESC_PAREN:
2370 elif pre == self.ESC_PAREN:
2374 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2371 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2375 else:
2372 else:
2376 # Auto-paren.
2373 # Auto-paren.
2377 # We only apply it to argument-less calls if the autocall
2374 # We only apply it to argument-less calls if the autocall
2378 # parameter is set to 2. We only need to check that autocall is <
2375 # parameter is set to 2. We only need to check that autocall is <
2379 # 2, since this function isn't called unless it's at least 1.
2376 # 2, since this function isn't called unless it's at least 1.
2380 if not theRest and (self.rc.autocall < 2):
2377 if not theRest and (self.rc.autocall < 2):
2381 newcmd = '%s %s' % (iFun,theRest)
2378 newcmd = '%s %s' % (iFun,theRest)
2382 auto_rewrite = False
2379 auto_rewrite = False
2383 else:
2380 else:
2384 if theRest.startswith('['):
2381 if theRest.startswith('['):
2385 if hasattr(obj,'__getitem__'):
2382 if hasattr(obj,'__getitem__'):
2386 # Don't autocall in this case: item access for an object
2383 # Don't autocall in this case: item access for an object
2387 # which is BOTH callable and implements __getitem__.
2384 # which is BOTH callable and implements __getitem__.
2388 newcmd = '%s %s' % (iFun,theRest)
2385 newcmd = '%s %s' % (iFun,theRest)
2389 auto_rewrite = False
2386 auto_rewrite = False
2390 else:
2387 else:
2391 # if the object doesn't support [] access, go ahead and
2388 # if the object doesn't support [] access, go ahead and
2392 # autocall
2389 # autocall
2393 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2390 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2394 elif theRest.endswith(';'):
2391 elif theRest.endswith(';'):
2395 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2392 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2396 else:
2393 else:
2397 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2394 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2398
2395
2399 if auto_rewrite:
2396 if auto_rewrite:
2400 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2397 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2401 # log what is now valid Python, not the actual user input (without the
2398 # log what is now valid Python, not the actual user input (without the
2402 # final newline)
2399 # final newline)
2403 self.log(line,newcmd,continue_prompt)
2400 self.log(line,newcmd,continue_prompt)
2404 return newcmd
2401 return newcmd
2405
2402
2406 def handle_help(self, line, continue_prompt=None,
2403 def handle_help(self, line, continue_prompt=None,
2407 pre=None,iFun=None,theRest=None):
2404 pre=None,iFun=None,theRest=None):
2408 """Try to get some help for the object.
2405 """Try to get some help for the object.
2409
2406
2410 obj? or ?obj -> basic information.
2407 obj? or ?obj -> basic information.
2411 obj?? or ??obj -> more details.
2408 obj?? or ??obj -> more details.
2412 """
2409 """
2413
2410
2414 # We need to make sure that we don't process lines which would be
2411 # We need to make sure that we don't process lines which would be
2415 # otherwise valid python, such as "x=1 # what?"
2412 # otherwise valid python, such as "x=1 # what?"
2416 try:
2413 try:
2417 codeop.compile_command(line)
2414 codeop.compile_command(line)
2418 except SyntaxError:
2415 except SyntaxError:
2419 # We should only handle as help stuff which is NOT valid syntax
2416 # We should only handle as help stuff which is NOT valid syntax
2420 if line[0]==self.ESC_HELP:
2417 if line[0]==self.ESC_HELP:
2421 line = line[1:]
2418 line = line[1:]
2422 elif line[-1]==self.ESC_HELP:
2419 elif line[-1]==self.ESC_HELP:
2423 line = line[:-1]
2420 line = line[:-1]
2424 self.log(line,'#?'+line,continue_prompt)
2421 self.log(line,'#?'+line,continue_prompt)
2425 if line:
2422 if line:
2426 #print 'line:<%r>' % line # dbg
2423 #print 'line:<%r>' % line # dbg
2427 self.magic_pinfo(line)
2424 self.magic_pinfo(line)
2428 else:
2425 else:
2429 page(self.usage,screen_lines=self.rc.screen_length)
2426 page(self.usage,screen_lines=self.rc.screen_length)
2430 return '' # Empty string is needed here!
2427 return '' # Empty string is needed here!
2431 except:
2428 except:
2432 # Pass any other exceptions through to the normal handler
2429 # Pass any other exceptions through to the normal handler
2433 return self.handle_normal(line,continue_prompt)
2430 return self.handle_normal(line,continue_prompt)
2434 else:
2431 else:
2435 # If the code compiles ok, we should handle it normally
2432 # If the code compiles ok, we should handle it normally
2436 return self.handle_normal(line,continue_prompt)
2433 return self.handle_normal(line,continue_prompt)
2437
2434
2438 def getapi(self):
2435 def getapi(self):
2439 """ Get an IPApi object for this shell instance
2436 """ Get an IPApi object for this shell instance
2440
2437
2441 Getting an IPApi object is always preferable to accessing the shell
2438 Getting an IPApi object is always preferable to accessing the shell
2442 directly, but this holds true especially for extensions.
2439 directly, but this holds true especially for extensions.
2443
2440
2444 It should always be possible to implement an extension with IPApi
2441 It should always be possible to implement an extension with IPApi
2445 alone. If not, contact maintainer to request an addition.
2442 alone. If not, contact maintainer to request an addition.
2446
2443
2447 """
2444 """
2448 return self.api
2445 return self.api
2449
2446
2450 def handle_emacs(self,line,continue_prompt=None,
2447 def handle_emacs(self,line,continue_prompt=None,
2451 pre=None,iFun=None,theRest=None):
2448 pre=None,iFun=None,theRest=None):
2452 """Handle input lines marked by python-mode."""
2449 """Handle input lines marked by python-mode."""
2453
2450
2454 # Currently, nothing is done. Later more functionality can be added
2451 # Currently, nothing is done. Later more functionality can be added
2455 # here if needed.
2452 # here if needed.
2456
2453
2457 # The input cache shouldn't be updated
2454 # The input cache shouldn't be updated
2458
2455
2459 return line
2456 return line
2460
2457
2461 def mktempfile(self,data=None):
2458 def mktempfile(self,data=None):
2462 """Make a new tempfile and return its filename.
2459 """Make a new tempfile and return its filename.
2463
2460
2464 This makes a call to tempfile.mktemp, but it registers the created
2461 This makes a call to tempfile.mktemp, but it registers the created
2465 filename internally so ipython cleans it up at exit time.
2462 filename internally so ipython cleans it up at exit time.
2466
2463
2467 Optional inputs:
2464 Optional inputs:
2468
2465
2469 - data(None): if data is given, it gets written out to the temp file
2466 - data(None): if data is given, it gets written out to the temp file
2470 immediately, and the file is closed again."""
2467 immediately, and the file is closed again."""
2471
2468
2472 filename = tempfile.mktemp('.py','ipython_edit_')
2469 filename = tempfile.mktemp('.py','ipython_edit_')
2473 self.tempfiles.append(filename)
2470 self.tempfiles.append(filename)
2474
2471
2475 if data:
2472 if data:
2476 tmp_file = open(filename,'w')
2473 tmp_file = open(filename,'w')
2477 tmp_file.write(data)
2474 tmp_file.write(data)
2478 tmp_file.close()
2475 tmp_file.close()
2479 return filename
2476 return filename
2480
2477
2481 def write(self,data):
2478 def write(self,data):
2482 """Write a string to the default output"""
2479 """Write a string to the default output"""
2483 Term.cout.write(data)
2480 Term.cout.write(data)
2484
2481
2485 def write_err(self,data):
2482 def write_err(self,data):
2486 """Write a string to the default error output"""
2483 """Write a string to the default error output"""
2487 Term.cerr.write(data)
2484 Term.cerr.write(data)
2488
2485
2489 def exit(self):
2486 def exit(self):
2490 """Handle interactive exit.
2487 """Handle interactive exit.
2491
2488
2492 This method sets the exit_now attribute."""
2489 This method sets the exit_now attribute."""
2493
2490
2494 if self.rc.confirm_exit:
2491 if self.rc.confirm_exit:
2495 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2492 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2496 self.exit_now = True
2493 self.exit_now = True
2497 else:
2494 else:
2498 self.exit_now = True
2495 self.exit_now = True
2499
2496
2500 def safe_execfile(self,fname,*where,**kw):
2497 def safe_execfile(self,fname,*where,**kw):
2501 """A safe version of the builtin execfile().
2498 """A safe version of the builtin execfile().
2502
2499
2503 This version will never throw an exception, and knows how to handle
2500 This version will never throw an exception, and knows how to handle
2504 ipython logs as well."""
2501 ipython logs as well."""
2505
2502
2506 def syspath_cleanup():
2503 def syspath_cleanup():
2507 """Internal cleanup routine for sys.path."""
2504 """Internal cleanup routine for sys.path."""
2508 if add_dname:
2505 if add_dname:
2509 try:
2506 try:
2510 sys.path.remove(dname)
2507 sys.path.remove(dname)
2511 except ValueError:
2508 except ValueError:
2512 # For some reason the user has already removed it, ignore.
2509 # For some reason the user has already removed it, ignore.
2513 pass
2510 pass
2514
2511
2515 fname = os.path.expanduser(fname)
2512 fname = os.path.expanduser(fname)
2516
2513
2517 # Find things also in current directory. This is needed to mimic the
2514 # Find things also in current directory. This is needed to mimic the
2518 # behavior of running a script from the system command line, where
2515 # behavior of running a script from the system command line, where
2519 # Python inserts the script's directory into sys.path
2516 # Python inserts the script's directory into sys.path
2520 dname = os.path.dirname(os.path.abspath(fname))
2517 dname = os.path.dirname(os.path.abspath(fname))
2521 add_dname = False
2518 add_dname = False
2522 if dname not in sys.path:
2519 if dname not in sys.path:
2523 sys.path.insert(0,dname)
2520 sys.path.insert(0,dname)
2524 add_dname = True
2521 add_dname = True
2525
2522
2526 try:
2523 try:
2527 xfile = open(fname)
2524 xfile = open(fname)
2528 except:
2525 except:
2529 print >> Term.cerr, \
2526 print >> Term.cerr, \
2530 'Could not open file <%s> for safe execution.' % fname
2527 'Could not open file <%s> for safe execution.' % fname
2531 syspath_cleanup()
2528 syspath_cleanup()
2532 return None
2529 return None
2533
2530
2534 kw.setdefault('islog',0)
2531 kw.setdefault('islog',0)
2535 kw.setdefault('quiet',1)
2532 kw.setdefault('quiet',1)
2536 kw.setdefault('exit_ignore',0)
2533 kw.setdefault('exit_ignore',0)
2537 first = xfile.readline()
2534 first = xfile.readline()
2538 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2535 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2539 xfile.close()
2536 xfile.close()
2540 # line by line execution
2537 # line by line execution
2541 if first.startswith(loghead) or kw['islog']:
2538 if first.startswith(loghead) or kw['islog']:
2542 print 'Loading log file <%s> one line at a time...' % fname
2539 print 'Loading log file <%s> one line at a time...' % fname
2543 if kw['quiet']:
2540 if kw['quiet']:
2544 stdout_save = sys.stdout
2541 stdout_save = sys.stdout
2545 sys.stdout = StringIO.StringIO()
2542 sys.stdout = StringIO.StringIO()
2546 try:
2543 try:
2547 globs,locs = where[0:2]
2544 globs,locs = where[0:2]
2548 except:
2545 except:
2549 try:
2546 try:
2550 globs = locs = where[0]
2547 globs = locs = where[0]
2551 except:
2548 except:
2552 globs = locs = globals()
2549 globs = locs = globals()
2553 badblocks = []
2550 badblocks = []
2554
2551
2555 # we also need to identify indented blocks of code when replaying
2552 # we also need to identify indented blocks of code when replaying
2556 # logs and put them together before passing them to an exec
2553 # logs and put them together before passing them to an exec
2557 # statement. This takes a bit of regexp and look-ahead work in the
2554 # statement. This takes a bit of regexp and look-ahead work in the
2558 # file. It's easiest if we swallow the whole thing in memory
2555 # file. It's easiest if we swallow the whole thing in memory
2559 # first, and manually walk through the lines list moving the
2556 # first, and manually walk through the lines list moving the
2560 # counter ourselves.
2557 # counter ourselves.
2561 indent_re = re.compile('\s+\S')
2558 indent_re = re.compile('\s+\S')
2562 xfile = open(fname)
2559 xfile = open(fname)
2563 filelines = xfile.readlines()
2560 filelines = xfile.readlines()
2564 xfile.close()
2561 xfile.close()
2565 nlines = len(filelines)
2562 nlines = len(filelines)
2566 lnum = 0
2563 lnum = 0
2567 while lnum < nlines:
2564 while lnum < nlines:
2568 line = filelines[lnum]
2565 line = filelines[lnum]
2569 lnum += 1
2566 lnum += 1
2570 # don't re-insert logger status info into cache
2567 # don't re-insert logger status info into cache
2571 if line.startswith('#log#'):
2568 if line.startswith('#log#'):
2572 continue
2569 continue
2573 else:
2570 else:
2574 # build a block of code (maybe a single line) for execution
2571 # build a block of code (maybe a single line) for execution
2575 block = line
2572 block = line
2576 try:
2573 try:
2577 next = filelines[lnum] # lnum has already incremented
2574 next = filelines[lnum] # lnum has already incremented
2578 except:
2575 except:
2579 next = None
2576 next = None
2580 while next and indent_re.match(next):
2577 while next and indent_re.match(next):
2581 block += next
2578 block += next
2582 lnum += 1
2579 lnum += 1
2583 try:
2580 try:
2584 next = filelines[lnum]
2581 next = filelines[lnum]
2585 except:
2582 except:
2586 next = None
2583 next = None
2587 # now execute the block of one or more lines
2584 # now execute the block of one or more lines
2588 try:
2585 try:
2589 exec block in globs,locs
2586 exec block in globs,locs
2590 except SystemExit:
2587 except SystemExit:
2591 pass
2588 pass
2592 except:
2589 except:
2593 badblocks.append(block.rstrip())
2590 badblocks.append(block.rstrip())
2594 if kw['quiet']: # restore stdout
2591 if kw['quiet']: # restore stdout
2595 sys.stdout.close()
2592 sys.stdout.close()
2596 sys.stdout = stdout_save
2593 sys.stdout = stdout_save
2597 print 'Finished replaying log file <%s>' % fname
2594 print 'Finished replaying log file <%s>' % fname
2598 if badblocks:
2595 if badblocks:
2599 print >> sys.stderr, ('\nThe following lines/blocks in file '
2596 print >> sys.stderr, ('\nThe following lines/blocks in file '
2600 '<%s> reported errors:' % fname)
2597 '<%s> reported errors:' % fname)
2601
2598
2602 for badline in badblocks:
2599 for badline in badblocks:
2603 print >> sys.stderr, badline
2600 print >> sys.stderr, badline
2604 else: # regular file execution
2601 else: # regular file execution
2605 try:
2602 try:
2606 if sys.platform == 'win32' and sys.version_info < (2,5,1):
2603 if sys.platform == 'win32' and sys.version_info < (2,5,1):
2607 # Work around a bug in Python for Windows. The bug was
2604 # Work around a bug in Python for Windows. The bug was
2608 # fixed in in Python 2.5 r54159 and 54158, but that's still
2605 # fixed in in Python 2.5 r54159 and 54158, but that's still
2609 # SVN Python as of March/07. For details, see:
2606 # SVN Python as of March/07. For details, see:
2610 # http://projects.scipy.org/ipython/ipython/ticket/123
2607 # http://projects.scipy.org/ipython/ipython/ticket/123
2611 try:
2608 try:
2612 globs,locs = where[0:2]
2609 globs,locs = where[0:2]
2613 except:
2610 except:
2614 try:
2611 try:
2615 globs = locs = where[0]
2612 globs = locs = where[0]
2616 except:
2613 except:
2617 globs = locs = globals()
2614 globs = locs = globals()
2618 exec file(fname) in globs,locs
2615 exec file(fname) in globs,locs
2619 else:
2616 else:
2620 execfile(fname,*where)
2617 execfile(fname,*where)
2621 except SyntaxError:
2618 except SyntaxError:
2622 self.showsyntaxerror()
2619 self.showsyntaxerror()
2623 warn('Failure executing file: <%s>' % fname)
2620 warn('Failure executing file: <%s>' % fname)
2624 except SystemExit,status:
2621 except SystemExit,status:
2625 if not kw['exit_ignore']:
2622 if not kw['exit_ignore']:
2626 self.showtraceback()
2623 self.showtraceback()
2627 warn('Failure executing file: <%s>' % fname)
2624 warn('Failure executing file: <%s>' % fname)
2628 except:
2625 except:
2629 self.showtraceback()
2626 self.showtraceback()
2630 warn('Failure executing file: <%s>' % fname)
2627 warn('Failure executing file: <%s>' % fname)
2631
2628
2632 syspath_cleanup()
2629 syspath_cleanup()
2633
2630
2634 #************************* end of file <iplib.py> *****************************
2631 #************************* end of file <iplib.py> *****************************
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now