How to write a simple shell loop in python?

Dietrich Bollmann diresu at web.de
Fri Jan 23 13:39:13 CET 2009


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




More information about the Python-list mailing list