Mercurial > python-cmd2
diff 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 diff
--- a/docs/pycon2010/pycon2010.rst Tue Feb 16 13:01:41 2010 -0500 +++ b/docs/pycon2010/pycon2010.rst Tue Feb 16 14:05:25 2010 -0500 @@ -1,84 +1,89 @@ -py 3 +===== +Title +===== Web 2.0 ======= .. image:: web-2-0-logos.gif - :height: 300 px + :height: 300px But first... ============ .. image:: sargon.jpg - :height: 300 px - -Sargon the Great founded the Akkadian Empire -in the twenty-third century BC. + :height: 300px + +Sargon the Great + Founder of Akkadian Empire + +.. twenty-third century BC In between ========== .. image:: apple.jpg - :height: 300 px + :height: 300px -Unlike the Akkadian Empire, the CLI will never disappear. - -line-oriented command interpreter -command-line interface -text user interface -terminal user interface -console -shell +Command-Line Interface + Unlike the Akkadian Empire, + the CLI will never die. Defining ======== + +- "Line-oriented command interpreter" +- "Command-line interface" +- "Shell" -Prompt accepts free text input -Outputs lines of text -CLI environment persists +* Accepts free text input at prompt +* Outputs lines of text +* Persistent CLI environment Examples ======== -Bash, Korn, zsh -Python shell -screen -Zork -ed -SQL clients: psql, SQL*\Plus, mysql... +* 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 single set of arguments at -invocation, execute, terminate - -dir -grep -ping +* Accept arguments at invocation +* execution +* terminate -sys.argv -optparse +Examples +-------- +* ls +* grep +* ping -!= Text User Interfaces -======================= +Use ``sys.argv``, ``optparse`` -("console") +!= "Text User Interfaces", "Consoles" +===================================== -Use entire (session) screen -Not line-by-line +* Use entire (session) screen +* I/O is *not* line-by-line .. image:: urwid.png :height: 300px -curses -urwid - +Use ``curses``, ``urwid`` -foo a b c -> -self.do_foo('a b c') -self.default('foo a b c') +Tradeoff +======== +.. image:: ease.png + :height: 300px + pirate.py ========= @@ -92,7 +97,95 @@ pirate = Pirate() pirate.cmdloop() -history: cursor -ctrl-r -help +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)) \ No newline at end of file