[IPython-dev] [IPython-user] Commits to CVS, fixes, and shell access (RFC)

pythondev-dang pythondev-dang at lazytwinacres.net
Thu Apr 1 11:26:39 EST 2004


This sounds great--similar to what I did for my "grep" shell access,
but generalized.  (I didn't look into storing the results in "hidden"
variables, but that looks like a good idea also.)

I'm having troubles accessing the CVS repository from here, so I 
won't be able to give usage feedback until after this weekend
at the soonest.

I've a question though.  My grep shell extension would capture
stdout and stderr separately, and wouldn't return stderr, but
just printed it.  It would then return whatever the command 
*had* sent to stdout (or None if nothing).  What does @sc do
for this?

    Thanks,
        --dang



   -------Original Message-------
   > From: Fernando Perez <fperez at colorado.edu>
   > Subject: [IPython-user] Commits to CVS, fixes, and shell access (RFC)
   > Sent: 01 Apr 2004 14:48:43
   >
   >  Hi all,
   >  
   >  I'm trying to catch up a bit on ipython matters.  I just committed some
   >  bugfixes to CVS for various problems (among others, Solaris crashes caused by
   >  the curses module and crashes when users closed sys.stdin/out/err).
   >  
   >  I also made some 'improvements' to the shell access mechanism, spurred by the
   >  recent discussions on the matter.   I'll try to say more about that discussion
   >  in a couple of days, but I'd appreciate some feedback on the changes I made.
   >  
   >  Recapping, people have always wanted easy access to the shell, with a way to
   >  capture the result for further python use.  I added @sc as a magic to do this
   >  in January, and it's flexible with options.  But at the time, the '!!' syntax
   >  was also liked, and I realized that a very common usage mode is simply to want
   >  to loop over shell output in a line-oriented manner (as most unix tools are
   >  designed).
   >  
   >  So I decided today to add (it's in CVS for you to play with) the following:
   >  
   >  - @sx, a new magic to execute in the shell any command.  This one, in contrast
   >  to @sc, doesn't require a variable name.  Instead it _returns_ the output,
   >  split as a list on '\n', to the normal ipython namespace.  Since ipython
   >  remembers all output as _N, Out[N], and the last three as _,__ and ___, I
   >  realized that this might be a very useful thing to have, leveraging the
   >  existing output storage mechanism.
   >  
   >  - !!cmd is a new syntax for '@sx cmd'.  It makes it very easy to get a command
   >  to the shell remembering and typing as little as possible.
   >  
   >  Examples:
   >  
   >  In [5]: !ls
   >  IPython-0.5.0.tar.gz  pyamazonpres.tgz
   >  
   >  In [6]: sx ls
   >  Out[6]: ['IPython-0.5.0.tar.gz', 'pyamazonpres.tgz']
   >  
   >  In [7]: !!ls  # identical to [6] above
   >  Out[7]: ['IPython-0.5.0.tar.gz', 'pyamazonpres.tgz']
   >  
   >  In [8]: sc a=ls  # nothing is printed, results in a
   >  
   >  In [9]: print a
   >  IPython-0.5.0.tar.gz
   >  pyamazonpres.tgz
   >  
   >  In [10]: sc -l a=ls  # results split as a list, then stored in a
   >  
   >  In [11]: print a
   >  ['IPython-0.5.0.tar.gz', 'pyamazonpres.tgz']
   >  
   >  
   >  In summary, you can now in ipython access the shell via (in addition to any
   >  aliases you may have defined):
   >  
   >  - !cmd -> execute cmd, return None (output of cmd is printed)
   >  
   >  - !!cmd, @sx cmd -> execute cmd and return output of cmd, split on '\n', as a
   >  python list.
   >  
   >  - @sc [options] var=cmd -> execute cmd and store its output in var.  Returns
   >  None.  Option -l causes a split on '\n' before storing into var, and option -v
   >  causes the contents to be printed.
   >  
   >  @sc is the one with the most flexibility for shell capture, while also
   >  requiring more typing and remembering options.
   >  
   >  
   >  I see myself mostly using !cmd as today for quick shell access, and !!cmd when
   >  I want to pick up for example some filenames for further manipulation through
   >  python.  !!cmd is a natural enough extension of !cmd that I think I can
   >  remember it easily.
   >  
   >  I'd appreciate feedback on these changes, esp. on whether they enhance
   >  ipython's functionality for shell access without detracting from its main
   >  python nature.  I'll try to address more radical (but optional) enhancements
   >  which others have proposed in another message in a few days.
   >  
   >  Also, any reports of breakage (or successful improvements) from the recent CVS
   >  commits would be very welcome.
   >  
   >  Cheers,
   >  
   >  f.
   >  
   >  _______________________________________________
   >  IPython-user mailing list
   >  IPython-user at scipy.net
   >  http://scipy.net/mailman/listinfo/ipython-user
   -------Original Message-------




More information about the IPython-dev mailing list