Is it possible to combine magics in IPython / Jupyter?
Sometimes you want to use several magics at the same time. Now I know you can use
%%time
%%bash
ls
But when I make my own commands this chaining doesn't work...
from IPython.core.magic import register_cell_magic
@register_cell_magic
def accio(line, cell):
print('accio')
exec(cell)
results in an error when using
%%accio
%%bash
ls
What should I use rather than exec
?
python jupyter-notebook ipython
add a comment |
Sometimes you want to use several magics at the same time. Now I know you can use
%%time
%%bash
ls
But when I make my own commands this chaining doesn't work...
from IPython.core.magic import register_cell_magic
@register_cell_magic
def accio(line, cell):
print('accio')
exec(cell)
results in an error when using
%%accio
%%bash
ls
What should I use rather than exec
?
python jupyter-notebook ipython
%%time
magic useexec
internally too, what's wrong with it?
– georgexsh
Nov 14 '18 at 9:13
Nothing :) just that it doesn't seem to be able to chain :)
– Roelant
Nov 14 '18 at 10:21
add a comment |
Sometimes you want to use several magics at the same time. Now I know you can use
%%time
%%bash
ls
But when I make my own commands this chaining doesn't work...
from IPython.core.magic import register_cell_magic
@register_cell_magic
def accio(line, cell):
print('accio')
exec(cell)
results in an error when using
%%accio
%%bash
ls
What should I use rather than exec
?
python jupyter-notebook ipython
Sometimes you want to use several magics at the same time. Now I know you can use
%%time
%%bash
ls
But when I make my own commands this chaining doesn't work...
from IPython.core.magic import register_cell_magic
@register_cell_magic
def accio(line, cell):
print('accio')
exec(cell)
results in an error when using
%%accio
%%bash
ls
What should I use rather than exec
?
python jupyter-notebook ipython
python jupyter-notebook ipython
asked Nov 8 '18 at 8:45
RoelantRoelant
1,320523
1,320523
%%time
magic useexec
internally too, what's wrong with it?
– georgexsh
Nov 14 '18 at 9:13
Nothing :) just that it doesn't seem to be able to chain :)
– Roelant
Nov 14 '18 at 10:21
add a comment |
%%time
magic useexec
internally too, what's wrong with it?
– georgexsh
Nov 14 '18 at 9:13
Nothing :) just that it doesn't seem to be able to chain :)
– Roelant
Nov 14 '18 at 10:21
%%time
magic use exec
internally too, what's wrong with it?– georgexsh
Nov 14 '18 at 9:13
%%time
magic use exec
internally too, what's wrong with it?– georgexsh
Nov 14 '18 at 9:13
Nothing :) just that it doesn't seem to be able to chain :)
– Roelant
Nov 14 '18 at 10:21
Nothing :) just that it doesn't seem to be able to chain :)
– Roelant
Nov 14 '18 at 10:21
add a comment |
2 Answers
2
active
oldest
votes
you have to apply the IPython special transformations, to run the nested magic with the cell, like the %%time
magic:
@register_cell_magic
def accio(line, cell):
ipy = get_ipython()
expr = ipy.input_transformer_manager.transform_cell(cell)
expr_ast = ipy.compile.ast_parse(expr)
expr_ast = ipy.transform_ast(expr_ast)
code = ipy.compile(expr_ast, '', 'exec')
exec(code)
or simply call run_cell
:
@register_cell_magic
def accio(line, cell):
get_ipython().run_cell(cell)
result:
In [1]: %%accio
...: %%time
...: %%bash
...: date
...:
accio
Wed Nov 14 17:41:55 CST 2018
CPU times: user 1.42 ms, sys: 4.21 ms, total: 5.63 ms
Wall time: 9.64 ms
This looks great :) Going to check in a bit.
– Roelant
Nov 14 '18 at 10:22
add a comment |
In IPython source code, they almost always use a class for creating magic statements because they can hold values, and I think that's what your looking for.
Check this source code to see some examples.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53204167%2fis-it-possible-to-combine-magics-in-ipython-jupyter%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
you have to apply the IPython special transformations, to run the nested magic with the cell, like the %%time
magic:
@register_cell_magic
def accio(line, cell):
ipy = get_ipython()
expr = ipy.input_transformer_manager.transform_cell(cell)
expr_ast = ipy.compile.ast_parse(expr)
expr_ast = ipy.transform_ast(expr_ast)
code = ipy.compile(expr_ast, '', 'exec')
exec(code)
or simply call run_cell
:
@register_cell_magic
def accio(line, cell):
get_ipython().run_cell(cell)
result:
In [1]: %%accio
...: %%time
...: %%bash
...: date
...:
accio
Wed Nov 14 17:41:55 CST 2018
CPU times: user 1.42 ms, sys: 4.21 ms, total: 5.63 ms
Wall time: 9.64 ms
This looks great :) Going to check in a bit.
– Roelant
Nov 14 '18 at 10:22
add a comment |
you have to apply the IPython special transformations, to run the nested magic with the cell, like the %%time
magic:
@register_cell_magic
def accio(line, cell):
ipy = get_ipython()
expr = ipy.input_transformer_manager.transform_cell(cell)
expr_ast = ipy.compile.ast_parse(expr)
expr_ast = ipy.transform_ast(expr_ast)
code = ipy.compile(expr_ast, '', 'exec')
exec(code)
or simply call run_cell
:
@register_cell_magic
def accio(line, cell):
get_ipython().run_cell(cell)
result:
In [1]: %%accio
...: %%time
...: %%bash
...: date
...:
accio
Wed Nov 14 17:41:55 CST 2018
CPU times: user 1.42 ms, sys: 4.21 ms, total: 5.63 ms
Wall time: 9.64 ms
This looks great :) Going to check in a bit.
– Roelant
Nov 14 '18 at 10:22
add a comment |
you have to apply the IPython special transformations, to run the nested magic with the cell, like the %%time
magic:
@register_cell_magic
def accio(line, cell):
ipy = get_ipython()
expr = ipy.input_transformer_manager.transform_cell(cell)
expr_ast = ipy.compile.ast_parse(expr)
expr_ast = ipy.transform_ast(expr_ast)
code = ipy.compile(expr_ast, '', 'exec')
exec(code)
or simply call run_cell
:
@register_cell_magic
def accio(line, cell):
get_ipython().run_cell(cell)
result:
In [1]: %%accio
...: %%time
...: %%bash
...: date
...:
accio
Wed Nov 14 17:41:55 CST 2018
CPU times: user 1.42 ms, sys: 4.21 ms, total: 5.63 ms
Wall time: 9.64 ms
you have to apply the IPython special transformations, to run the nested magic with the cell, like the %%time
magic:
@register_cell_magic
def accio(line, cell):
ipy = get_ipython()
expr = ipy.input_transformer_manager.transform_cell(cell)
expr_ast = ipy.compile.ast_parse(expr)
expr_ast = ipy.transform_ast(expr_ast)
code = ipy.compile(expr_ast, '', 'exec')
exec(code)
or simply call run_cell
:
@register_cell_magic
def accio(line, cell):
get_ipython().run_cell(cell)
result:
In [1]: %%accio
...: %%time
...: %%bash
...: date
...:
accio
Wed Nov 14 17:41:55 CST 2018
CPU times: user 1.42 ms, sys: 4.21 ms, total: 5.63 ms
Wall time: 9.64 ms
answered Nov 14 '18 at 9:37
georgexshgeorgexsh
10.2k11336
10.2k11336
This looks great :) Going to check in a bit.
– Roelant
Nov 14 '18 at 10:22
add a comment |
This looks great :) Going to check in a bit.
– Roelant
Nov 14 '18 at 10:22
This looks great :) Going to check in a bit.
– Roelant
Nov 14 '18 at 10:22
This looks great :) Going to check in a bit.
– Roelant
Nov 14 '18 at 10:22
add a comment |
In IPython source code, they almost always use a class for creating magic statements because they can hold values, and I think that's what your looking for.
Check this source code to see some examples.
add a comment |
In IPython source code, they almost always use a class for creating magic statements because they can hold values, and I think that's what your looking for.
Check this source code to see some examples.
add a comment |
In IPython source code, they almost always use a class for creating magic statements because they can hold values, and I think that's what your looking for.
Check this source code to see some examples.
In IPython source code, they almost always use a class for creating magic statements because they can hold values, and I think that's what your looking for.
Check this source code to see some examples.
answered Nov 14 '18 at 1:44
PROWPROW
1527
1527
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53204167%2fis-it-possible-to-combine-magics-in-ipython-jupyter%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
%%time
magic useexec
internally too, what's wrong with it?– georgexsh
Nov 14 '18 at 9:13
Nothing :) just that it doesn't seem to be able to chain :)
– Roelant
Nov 14 '18 at 10:21