view docs/pycon2010/pycon2010.rst @ 344:4300ef912f4a

graph'
author catherine@Drou
date Tue, 16 Feb 2010 14:05:25 -0500
parents 2ce34ad4e520
children 6fe1e75e3a67
line wrap: on
line source

=====
Title
=====

Web 2.0
=======

.. image:: web-2-0-logos.gif
   :height: 300px
   
But first...
============

.. image:: sargon.jpg
   :height: 300px

Sargon the Great
  Founder of Akkadian Empire
  
.. twenty-third century BC

In between
==========

.. image:: apple.jpg
   :height: 300px
 
Command-Line Interface
  Unlike the Akkadian Empire, 
  the CLI will never die.

Defining
========
  
- "Line-oriented command interpreter"
- "Command-line interface"
- "Shell"

* Accepts free text input at prompt
* Outputs lines of text
* Persistent CLI environment

Examples
========

* Bash, Korn, zsh
* Python shell
* screen
* Zork
* SQL clients: psql, SQL*\Plus, mysql...
* ed

.. ``ed`` proves that CLI is sometimes the wrong answer.

!= Command Line Utilities
=========================

* Accept arguments at invocation
* execution
* terminate

Examples
--------
* ls
* grep
* ping

Use ``sys.argv``, ``optparse``

!= "Text User Interfaces", "Consoles"
=====================================

* Use entire (session) screen
* I/O is *not* line-by-line

.. image:: urwid.png
   :height: 300px
   
Use ``curses``, ``urwid``

Tradeoff
========

.. image:: ease.png
   :height: 300px
   
pirate.py
=========

::

   from cmd import Cmd
   
   class Pirate(Cmd):
       pass
   
   pirate = Pirate()
   pirate.cmdloop()

Nothing here... but history and help

.. ctrl-r for bash-style history

Fundamental prrrinciple
=======================

.. class: huge

   ``foo a b c`` ->
   
   ``self.do_foo('a b c')``

``do_``-methods: pirate2.py
===========================

::

   class Pirate(Cmd):
       gold = 10
       def do_loot(self, arg):
           'Seize booty frrrom a passing ship.'
           self.gold += 1
           print('Now we gots {0} doubloons'.format(self.gold))
       def do_drink(self, arg):
           'Drown your sorrrows in rrrum.'
           self.gold -= 1
           print('Now we gots {0} doubloons'.format(self.gold))

.. do_methods; more help           

Hooks
=====

.. image:: hook.jpeg
   :height: 300px

Hooks: pirate3.py
=================

::

   class Pirate(Cmd):
       gold = 3
       def do_loot(self, arg):
           'Drown your sorrrows in rrrum.'        
           self.gold += 1
       def do_drink(self, arg):
           'Drown your sorrrows in rrrum.'        
           self.gold -= 1
       def postcmd(self, stop, line):                         
           print('Now we gots {0} doubloons'.format(self.gold))
           
Arguments: pirate4.py
=====================

::

        def do_drink(self, arg):
            '''Drown your sorrrows in rrrum.
            
            drink [n] - drink [n] barrel[s] o' rum.'''  
            try:
                self.gold -= int(arg)
            except:
                if arg:
                    print('''What's "{0}"?  I'll take rrrum.'''.format(arg))
                self.gold -= 1            
        
quitting: pirate5.py
====================

::

    def postcmd(self, stop, line):
        print('Now we gots {0} doubloons'.format(self.gold))
        if self.gold < 0:
            print("Off to debtorrr's prrrison.  Game overrr.")
            return True
        return stop
    def do_quit(self, arg):
        print("Quiterrr!")
        return True   

prompts and defaults: pirate6.py
================================

::

    prompt = 'arrr> '
    def default(self, line):
        print('What mean ye by "{0}"?'.format(line))