Re: How to write a simple shell loop in python?

Discussion in 'Python' started by Dietrich Bollmann, Jan 23, 2009.

  1. [Sorry for top posting - I had a HD problem and lost the original mails]

    Hi Saul, Steve, Ben, James, Scott David and James!

    Thank you all very much for your help! I finally got rid of the extra
    space and also understood why the space was printed :)

    After using Steve's 'input = raw_input("$ ")' solution for a while -
    it does exactly what I want and is the fastest fix also - I wanted
    command line editing and switched to the cmd.Cmd module.

    Special thanks to James Mills for writing his own solution!

    I would like to use your component - but cmd.Cmd is just perfect
    for my purpose and I want to run my program without the need to
    install any new module (I am writing the program for somebody else).

    I got interested in circuits though - but the homepage
    http://trac.softcircuit.com.au/circuits/ (currently?) seems not to be
    available.

    Thanks again for your answers :)

    Dietrich


    PS: There is a little tutorial for cmd.Cmd here:

    - http://www.doughellmann.com/PyMOTW/cmd/index.html

    The documentation is here:

    - http://docs.python.org/library/cmd.html

    (got it from Ben Finney's post)


    On Wed, 2009-01-21 at 08:37 -0500, Steve Holden wrote:
    > Dietrich Bollmann wrote:
    > > Hi,
    > >
    > > I am trying to write a simple shell loop in Python.
    > >
    > > My simple approach works fine - but the first output line after entering
    > > something is always indented by one blank.
    > >
    > > Is there any logic explanation for this?
    > > How can I get rid of the blank?
    > > Is there a smarter way to write a simple shell loop which would work
    > > better?
    > >
    > > Thanks, Dietrich
    > >
    > >
    > > Here my approach:
    > >
    > > $ python
    > > Python 2.5.2 (r252:60911, Jan 4 2009, 17:40:26)
    > > [GCC 4.3.2] on linux2
    > > Type "help", "copyright", "credits" or "license" for more information.
    > >>>> import sys
    > >>>> while (1):

    > > ... print "$ ",
    > > ... input = sys.stdin.readline()

    > Just replace the lines above with
    >
    > input = raw_input("$ ")
    >
    > and you'll be fine. The "," in the print statement causes the
    > interpreter to set a flag to emit a space before the next output unless
    > it has just printed a newline. The "newline", of course, is provided by
    > the input, so the next print emits a space since it *hasn't* just
    > emitted a newline.
    >
    > regards
    > Steve
    >
    > > ... input = input.strip()
    > > ... print input
    > > ... print input
    > > ... print input
    > > ...
    > > $ one
    > > one
    > > one
    > > one
    > > $ two
    > > two
    > > two
    > > two
    > > $ three
    > > three
    > > three
    > > three
    > > $
    > > Traceback (most recent call last):
    > > File "<stdin>", line 3, in <module>
    > > KeyboardInterrupt
    > >
    > >
    > > --
    > > http://mail.python.org/mailman/listinfo/python-list
    > >

    >
    >
    Dietrich Bollmann, Jan 23, 2009
    #1
    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. Christian Heimes
    Replies:
    0
    Views:
    589
    Christian Heimes
    Feb 27, 2008
  2. Gerardo Herzig
    Replies:
    1
    Views:
    1,061
    Philipp Pagel
    Feb 27, 2008
  3. D'Arcy J.M. Cain
    Replies:
    0
    Views:
    850
    D'Arcy J.M. Cain
    Feb 27, 2008
  4. James Mills
    Replies:
    0
    Views:
    766
    James Mills
    Jan 21, 2009
  5. Isaac Won
    Replies:
    9
    Views:
    353
    Ulrich Eckhardt
    Mar 4, 2013
Loading...

Share This Page