[Q] ipython: Multiple commands on the same line and newlines

Discussion in 'Python' started by Phil Winder, Apr 16, 2011.

  1. Phil Winder

    Phil Winder Guest

    Hi,
    I'm having a go at using ipython as a command prompt for data
    analysis. Coming from Matlab, I'm used to typing multiple commands on
    the same line then using the up arrow to go through my history.
    How can I write multiple python commands on the same line?
    E.g. "x = 0; while x < 10: x = x + 1;" returns an "invalid syntax"
    error on the 'e' in while.

    Also, how can I produce a new line, without it running the command? I
    would have expected a ctrl-enter or shift-enter to produce the
    expected results.
    E.g. I want:
    "x = 0; <ctrl-enter>
    while x < 10: <ctrl-enter>
    x = x + 1; <ctrl-enter>
    " <enter to run>
    It seems to work automatically for the "while xxx:", but combinations
    of keys+enter do not work for "normal" lines.

    Cheers,
    Phil
     
    Phil Winder, Apr 16, 2011
    #1
    1. Advertising

  2. Phil Winder <> writes:

    > Hi,
    > I'm having a go at using ipython as a command prompt for data
    > analysis. Coming from Matlab, I'm used to typing multiple commands on
    > the same line then using the up arrow to go through my history.
    > How can I write multiple python commands on the same line?
    > E.g. "x = 0; while x < 10: x = x + 1;" returns an "invalid syntax"
    > error on the 'e' in while.
    >
    > Also, how can I produce a new line, without it running the command? I
    > would have expected a ctrl-enter or shift-enter to produce the
    > expected results.
    > E.g. I want:
    > "x = 0; <ctrl-enter>
    > while x < 10: <ctrl-enter>
    > x = x + 1; <ctrl-enter>
    > " <enter to run>
    > It seems to work automatically for the "while xxx:", but combinations
    > of keys+enter do not work for "normal" lines.
    >
    > Cheers,
    > Phil


    Well when you do something like

    while x < 10:

    it doesn't execute anything, but goes to newline and waits for the rest.

    for
    x = 10

    what's the difference for you if it gets evaluated before or after?
    Anyway you can you also %cpaste if you want to write more code

    Anyway to me this works perfectly:
    In [1]: x = 0

    In [2]: while x < 10: print x; x += 1
    ...:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Andrea Crotti, Apr 16, 2011
    #2
    1. Advertising

  3. On Sun, Apr 17, 2011 at 2:29 AM, Andrea Crotti
    <> wrote:
    > for
    > x = 10
    >
    > what's the difference for you if it gets evaluated before or after?


    I have the same issue in IDLE sometimes, and the reason it's annoying
    relates to the up-arrow key (Alt-P in IDLE). I can retrieve one entire
    command, but if that command requires a "prefix statement" to set
    things up (like initializing a dictionary to empty), that has to be
    separate.

    Chris Angelico
     
    Chris Angelico, Apr 16, 2011
    #3
  4. Phil Winder

    Phil Winder Guest

    Re: ipython: Multiple commands on the same line and newlines

    On Apr 16, 5:29 pm, Andrea Crotti <> wrote:
    > Phil Winder <> writes:
    > > Hi,
    > > I'm having a go at using ipython as a command prompt for data
    > > analysis. Coming from Matlab, I'm used to typing multiple commands on
    > > the same line then using the up arrow to go through my history.
    > > How can I write multiple python commands on the same line?
    > > E.g. "x = 0; while x < 10: x = x + 1;" returns an "invalid syntax"
    > > error on the 'e' in while.

    >
    > > Also, how can I produce a new line, without it running the command? I
    > > would have expected a ctrl-enter or shift-enter to produce the
    > > expected results.
    > > E.g. I want:
    > > "x = 0; <ctrl-enter>
    > > while x < 10: <ctrl-enter>
    > >     x = x + 1; <ctrl-enter>
    > > " <enter to run>
    > > It seems to work automatically for the "while xxx:", but combinations
    > > of keys+enter do not work for "normal" lines.

    >
    > > Cheers,
    > > Phil

    >
    > Well when you do something like
    >
    > while x < 10:
    >
    > it doesn't execute anything, but goes to newline and waits for the rest.
    >
    > for
    > x = 10
    >
    > what's the difference for you if it gets evaluated before or after?
    > Anyway you can you also %cpaste if you want to write more code
    >
    > Anyway to me this works perfectly:
    > In [1]: x = 0
    >
    > In [2]: while x < 10: print x; x += 1
    >    ...:
    > 0
    > 1
    > 2
    > 3
    > 4
    > 5
    > 6
    > 7
    > 8
    > 9


    Yes, that does not produce an error, but it does not "work". Please
    refer to my first post. Try the first code, you will get a syntax
    error. Placing things on one line makes for easy history scrollback.
    In your version you will have 2 lines of history for the x = 0 term
    and the while ... term. I don't want to have to press up twice,
    especially when the code was in the distant past! Also cpaste might be
    ok for scripting, but it looks too clumsy to use at the command line.

    Cheers,
    Phil
     
    Phil Winder, Apr 16, 2011
    #4
  5. Phil Winder

    Terry Reedy Guest

    On 4/16/2011 9:55 AM, Phil Winder wrote:
    > Hi,
    > I'm having a go at using ipython as a command prompt for data
    > analysis. Coming from Matlab, I'm used to typing multiple commands on
    > the same line then using the up arrow to go through my history.
    > How can I write multiple python commands on the same line?


    You can write multiple *simple* statements using ';'.

    > E.g. "x = 0; while x< 10: x = x + 1;" returns an "invalid syntax"
    > error on the 'e' in while.


    All compound statements, like while, must start on own line.

    > Also, how can I produce a new line, without it running the command?


    Use an editor, as with IDLE, rather than a shell. Interactive mode runs
    *1* statement (including simple;simple) at a time.

    > would have expected a ctrl-enter or shift-enter to produce the
    > expected results.
    > E.g. I want:
    > "x = 0;<ctrl-enter>


    This is one statement

    > while x< 10:<ctrl-enter>
    > x = x + 1;<ctrl-enter>


    This is another.

    I can understanding wanting to rerun initialized loops with one enter,
    but you cannot. Sorry.

    --
    Terry Jan Reedy
     
    Terry Reedy, Apr 16, 2011
    #5
  6. Phil Winder wrote:

    > Hi,
    > I'm having a go at using ipython as a command prompt for data
    > analysis. Coming from Matlab, I'm used to typing multiple commands on
    > the same line then using the up arrow to go through my history.
    > How can I write multiple python commands on the same line?
    > E.g. "x = 0; while x < 10: x = x + 1;" returns an "invalid syntax"
    > error on the 'e' in while.
    >
    > Also, how can I produce a new line, without it running the command? I
    > would have expected a ctrl-enter or shift-enter to produce the
    > expected results.
    > E.g. I want:
    > "x = 0; <ctrl-enter>
    > while x < 10: <ctrl-enter>
    > x = x + 1; <ctrl-enter>
    > " <enter to run>
    > It seems to work automatically for the "while xxx:", but combinations
    > of keys+enter do not work for "normal" lines.


    You might want to take a look at DreamPie (
    http://dreampie.sourceforge.net/ ), which provides the second option you
    indicate (and thus makesthe first unnecessary). I've found it quite
    convenient for interactive use.


    --
    --OKB (not okblacke)
    Brendan Barnwell
    "Do not follow where the path may lead. Go, instead, where there is
    no path, and leave a trail."
    --author unknown
     
    OKB (not okblacke), Apr 17, 2011
    #6
  7. Re: ipython: Multiple commands on the same line and newlines

    Phil Winder <> writes:

    > Yes, that does not produce an error, but it does not "work". Please
    > refer to my first post. Try the first code, you will get a syntax
    > error. Placing things on one line makes for easy history scrollback.
    > In your version you will have 2 lines of history for the x = 0 term
    > and the while ... term. I don't want to have to press up twice,
    > especially when the code was in the distant past! Also cpaste might be
    > ok for scripting, but it looks too clumsy to use at the command line.
    >
    > Cheers,
    > Phil


    Well I guess that's the way it is with the interpreter..
    But I don't see the sense in doing everything from there, just write the
    code to a file and use %edit from ipython to change and run it, it's
    quite nice and easy too.
     
    Andrea Crotti, Apr 17, 2011
    #7
  8. Phil Winder

    Phil Winder Guest

    Re: ipython: Multiple commands on the same line and newlines

    On Apr 17, 1:11 pm, Andrea Crotti <> wrote:
    > Phil Winder <> writes:
    > > Yes, that does not produce an error, but it does not "work". Please
    > > refer to my first post. Try the first code, you will get a syntax
    > > error. Placing things on one line makes for easy history scrollback.
    > > In your version you will have 2 lines of history for the x = 0 term
    > > and the while ... term. I don't want to have to press up twice,
    > > especially when the code was in the distant past! Also cpaste might be
    > > ok for scripting, but it looks too clumsy to use at the command line.

    >
    > > Cheers,
    > > Phil

    >
    > Well I guess that's the way it is with the interpreter..
    > But I don't see the sense in doing everything from there, just write the
    > code to a file and use %edit from ipython to change and run it, it's
    > quite nice and easy too.


    Ok, thanks all. It's a little disappointing, but I guess that you
    always have to work in a different way when you move to a new
    language. Andrea's %edit method is probably the best compromise, but
    this now means that I will have to learn all the (obscure) shortcuts
    for vi!

    Cheers,
    Phil
     
    Phil Winder, Apr 17, 2011
    #8
  9. Re: ipython: Multiple commands on the same line and newlines

    On 17.04.2011 20:40, Phil Winder wrote:
    > Ok, thanks all. It's a little disappointing, but I guess that you
    > always have to work in a different way when you move to a new
    > language. Andrea's %edit method is probably the best compromise, but
    > this now means that I will have to learn all the (obscure) shortcuts
    > for vi!


    As you can read in "Python IDE/text-editor" thread. Learning either
    Vim or Emacs will pay off in the long run,

    Anyway, IPython honors the $EDITOR environment variable. Just set it
    to whatever editor you prefer.
     
    Alexander Kapps, Apr 17, 2011
    #9
  10. Phil Winder

    harrismh777 Guest

    Terry Reedy wrote:
    > You can write multiple *simple* statements using ';'.


    > All compound statements, like while, must start on own line.


    >> E.g. I want:
    >> "x = 0;<ctrl-enter>

    >
    > This is one statement


    >> while x< 10:<ctrl-enter>
    >> x = x + 1;<ctrl-enter>



    Lutz has a very nice write-up entitled "Why Indentation Syntax?"

    Lutz, Mark, "Learning Python: Powerful Object Oriented Programming,"
    4th ed, (Sebastopol: O'Reilly, 2009), 266 -271.

    He makes the point clear that only simple statements may be chained
    together on a single line with ; and that compound statements (like
    while) "must still appear on lines of their own" (Lutz, 269).

    It might be nice (as an option) to be able to disengage the forced
    indentation syntax rules of Python. In other words, provide indentation
    syntax by default and allow an option via environment variable to engage
    an alternate (more C-like) blocking syntax.

    The forced indentation syntax is great for readability (and
    frankly, I like the appearance /low clutter) but it is inconvenient in
    some situations, like the one at the top of the thread.

    Just an idea (probably already been beaten to death long before my
    time) :)

    kind regards,
    m harris
     
    harrismh777, Apr 18, 2011
    #10
  11. On Mon, Apr 18, 2011 at 4:01 PM, harrismh777 <> wrote:
    >    It might be nice (as an option) to be able to disengage the forced
    > indentation syntax rules of Python. In other words, provide indentation
    > syntax by default and allow an option via environment variable to engage an
    > alternate (more C-like) blocking syntax.
    >


    You can do that with a future directive.

    from __future__ import braces

    That's two underscores before and after the word "future".
    http://docs.python.org/reference/simple_stmts.html#future-statements

    Chris Angelico
     
    Chris Angelico, Apr 18, 2011
    #11
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Ben Pfaff

    Re: man pages for C commands (GCC commands)

    Ben Pfaff, Jun 24, 2003, in forum: C Programming
    Replies:
    4
    Views:
    3,995
    Thomas Stegen
    Jun 28, 2003
  2. Tim Stanka
    Replies:
    1
    Views:
    816
    Jeff Epler
    Aug 2, 2004
  3. bdb112
    Replies:
    2
    Views:
    1,184
    Jason Scheirer
    Mar 12, 2009
  4. scoop
    Replies:
    4
    Views:
    1,175
    John Machin
    Mar 12, 2009
  5. Wolfram Brenig

    ipython -wthread vs. ipython -pylab

    Wolfram Brenig, Sep 12, 2011, in forum: Python
    Replies:
    0
    Views:
    351
    Wolfram Brenig
    Sep 12, 2011
Loading...

Share This Page