Skip to content

Cookbook: Macro arguments

Brian Granger edited this page Feb 13, 2013 · 1 revision

It's now (svn rev 2337) possible to call macros with arguments on the command line. This is handy if you have constructed an elaborate macro and want to %edit it to be more generic - specify different target directories to copy files etc.

The arguments to macros are always contained in IPython user namespace, in _margv list variable, created using the normal IPython autocall handling.

Here we create a macro that takes an argument by "simulating" the argument passing on the first run (line #1):

[C:\ipython]|1> _margv = (34,)
[C:\ipython]|2> print "hello",_margv[0]
hello 34
[C:\ipython]|3> macro morjensta 2
Macro `morjensta` created. To execute, type its name (without quotes).
Macro contents:
print "hello",_margv[0]

[C:\ipython]|4> morjensta "jukka"
hello jukka
[C:\ipython]|6> hist
1: _margv = (34,)
2: print "hello",_margv[0]
3: _ip.magic("macro morjensta 2")
4: morjensta("jukka")
5: print "hello",_margv[0]
6: _ip.magic("hist ")
[C:\ipython]|7>

Of course you can't now call the macro without arguments anymore:

[C:\ipython]|9> morjensta
C:\ipython\<ipython console> in <module>()
<type 'exceptions.IndexError'>: tuple index out of range
Clone this wiki locally