Is it possible to combine magics in IPython / Jupyter?












1















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?










share|improve this question























  • %%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
















1















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?










share|improve this question























  • %%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














1












1








1


0






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?










share|improve this question














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






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 8 '18 at 8:45









RoelantRoelant

1,320523




1,320523













  • %%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



















  • %%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

















%%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












2 Answers
2






active

oldest

votes


















2





+50









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





share|improve this answer
























  • This looks great :) Going to check in a bit.

    – Roelant
    Nov 14 '18 at 10:22



















0














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.






share|improve this answer























    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
    });


    }
    });














    draft saved

    draft discarded


















    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









    2





    +50









    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





    share|improve this answer
























    • This looks great :) Going to check in a bit.

      – Roelant
      Nov 14 '18 at 10:22
















    2





    +50









    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





    share|improve this answer
























    • This looks great :) Going to check in a bit.

      – Roelant
      Nov 14 '18 at 10:22














    2





    +50







    2





    +50



    2




    +50





    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





    share|improve this answer













    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






    share|improve this answer












    share|improve this answer



    share|improve this answer










    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



















    • 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













    0














    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.






    share|improve this answer




























      0














      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.






      share|improve this answer


























        0












        0








        0







        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.






        share|improve this answer













        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.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 14 '18 at 1:44









        PROWPROW

        1527




        1527






























            draft saved

            draft discarded




















































            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.




            draft saved


            draft discarded














            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





















































            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







            Popular posts from this blog

            Xamarin.iOS Cant Deploy on Iphone

            Glorious Revolution

            Dulmage-Mendelsohn matrix decomposition in Python