<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 2. Users Guide</title><meta name="generator" content="DocBook XSL Stylesheets V1.65.1" /><link rel="home" href="index.html" title="CapiSuite 0.4.5" /><link rel="up" href="index.html" title="CapiSuite 0.4.5" /><link rel="previous" href="re05.html" title="capisuitefax" /><link rel="next" href="ch02s02.html" title="A first look on the incoming and idle scripts" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Users Guide</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="re05.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch02s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="userguide"></a>Chapter 2. Users Guide</h2></div></div><div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch02.html#ug_python">Introduction to Python</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02.html#python_basics">Python Basics</a></span></dt><dt><span class="sect2"><a href="ch02.html#py_blocks">Blocks, Functions and Exceptions</a></span></dt><dt><span class="sect2"><a href="ch02.html#py_modules">Working with modules</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s02.html">A first look on the incoming and idle scripts</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s02.html#ug_scripts_incoming">The incoming script</a></span></dt><dt><span class="sect2"><a href="ch02s02.html#ug_scripts_idle">The idle script</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s03.html">Used file formats</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s03.html#voice_fileformat">Format of voice files (inversed A-Law, 8kHz, mono)</a></span></dt><dt><span class="sect2"><a href="ch02s03.html#fax_fileformat">Format of fax files (Structured Fax Files)</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s04.html">Tutorial: writing an incoming script</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s04.html#incoming_tut_basics">Basics and a really dumb answering machine.</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#incoming_tut_improving">Improving it to a useful (?) state</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#incoming_tut_unique_names">Using sensible file names</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#incoming_tut_fax_recognition">Automatic fax recognition and receiving</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s05.html">Example for an idle script</a></span></dt><dt><span class="sect1"><a href="ch02s06.html">Structural overview of the default scripts</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s06.html#default_incoming">incoming.py</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#default_idle">idle.py</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#default_capisuitefax">capisuitefax</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#default_helpers">cs_helpers.py</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s07.html">CapiSuite command reference</a></span></dt></dl></div><p>In the last chapter you've seen how to use the default scripts distributed with <span class="application">CapiSuite</span>. But the main goal in developing <span class="application">CapiSuite</span> was not to provide a perfect ready-to-use application. I intended to develop a tool where you can write your <span class="emphasis"><em>own</em></span> applications very easyly. I'll show you how to do this in the next sections.</p><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="ug_python"></a>Introduction to Python</h2></div></div><div></div></div><p>As I thought about the scripting language I wanted to integrate into <span class="application">CapiSuite</span>, my first idea was to develop an own, simple one. But as more as I looked into it, the more I found that a general purpose language will be much more helpful than re-inventing every wheel that I would need. So I looked for some easy to integrate (and to learn) language. The one I liked most was Python - and it also had a nice documentation about embedding, so I chose it and I'm still happy about that decision. :-)</p><p>So the first thing you'll have to do is to learn Python. Don't be afraid - it was developed as a beginners language and Guido (Guido van Rossum, the inventor of Python) has done very well in my opinion.</p><p>In the next few sections, I'll give you a short introduction to the features of Python you most probably will need for <span class="application">CapiSuite</span>. As this shouldn't be a manual about Python or a tutorial in computer programming, I assume you're already familiar with the basic concepts of todays wide-spread procedural and object-oriented languages.</p><p>If not, I would advise you to get and read a book for learning Python - there are many available in different languages. The Python home page on <a href="http://www.python.org" target="_top">http://www.python.org</a> has also nice and comprehensive manuals and tutorials available for free.</p><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="python_basics"></a>Python Basics</h3></div></div><div></div></div><p>Python supports most features you know from other common languages. Here's the syntax of the basic operations shown in a Python session. A Python session is another fine feature of its interpreter: just start it by typing <span><b class="command">python</b></span> in a shell and you'll get a prompt:</p><pre class="screen">gernot@linux:~> python Python 2.2.1 (#1, Sep 10 2002, 17:49:17) [GCC 3.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>></pre><p>As you can see, the Python prompt is <tt class="literal">>>></tt>. If you enter commands that span multiple lines, Python shows a second prompt: <tt class="literal">...</tt></p><pre class="screen">>>> if (1==2): ... print "Now THAT's interesting!" ...</pre><p>Ok, now let's go on:</p><pre class="screen">>>> # comments start with # at the begin of a line >>> # now the usual first steps >>> print "hello world" hello world >>> # variables >>> a=5 # no separate declarations necessary >>> b=a*2 >>> print b 10 >>> b='hello' >>> print b,'world' hello world >>> # python is very powerful in handling sequences >>> a=(1,2,3) # defines a tuple (not changeable!) >>> print a (1, 2, 3) >>> a[1]=2 # this must fail Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: object doesn't support item assignment >>> a=[1,2,3] # defines a list (changeable) >>> a[1]=7 >>> print a [1, 7, 3] >>> # control structures >>> if (b=='hello'): ... print "b is hello" ... else: ... print "????" ... b is hello >>> # the for statement can iterate over sequences >>> for i in a: ... print i ... 1 7 3 >>> # replace positions 1 to 3 (without 3) with 0 >>> a[1:3]=[0] >>> a [1, 0] >>> # a[-i] is the i-the element counted from the back >>> a[-1]=7; a[-2]=8 >>> a [8, 7]</pre></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="py_blocks"></a>Blocks, Functions and Exceptions</h3></div></div><div></div></div><p>Blocks are grouped only by identation. No <tt class="literal">begin</tt>, <tt class="literal">end</tt>, braces (<tt class="literal">{</tt>, <tt class="literal">}</tt>) or the like are needed. This sounds very uncomfortable at the first sight, but it's really nice - you must always structure your code exactly how you <span class="emphasis"><em>mean</em></span> it:</p><pre class="screen">>>> for i in [1,2,3]: ... print 2*i ... 2 4 6 >>> i=0 >>> while (i!=3): ... print i ... i+=1 ... 0 1 2</pre><p>Now let's see how to define functions and how to work with exceptions:</p><pre class="screen">>>> def double_it(a): ... return (2*a) ... >>> print double_it(9) 18 >>> print double_it("hello") hellohello >>> >>> # let's trigger a exception >>> a=1/0 Traceback (most recent call last): File "<stdin>", line 1, in ? ZeroDivisionError: integer division or modulo by zero >>> >>> # now let's catch it >>> try: ... a=1/0 ... except ZeroDivisionError,e: ... print "You divided by zero, message was:",e ... You divided by zero, message was: integer division or modulo by zero</pre></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="py_modules"></a>Working with modules</h3></div></div><div></div></div><p>Modules are a way to group functions together. They must be imported before you can use them and they give you a new object containing all functions. Let's play around with some of them: </p><pre class="screen">>>> import time >>> # what is in time? >>> dir(time) ['__doc__', '__file__', '__name__', 'accept2dyear', ...] >>> # So - what do all these functions do? Python can tell... >>> print time.__doc__ This module provides various functions to manipulate time values. [...] Variables: [...] Functions: time() -- return current time in seconds since the Epoch as a float ctime() -- convert time in seconds to string [...] >>> # Could you please explain ctime in more detail? >>> print time.ctime.__doc__ ctime(seconds) -> string Convert a time in seconds since the Epoch to a string in local time. This is equivalent to asctime(localtime(seconds)). When the time tuple is not present, current time as returned by localtime() is used. >>> time.time() 1044380131.186987 >>> time.ctime() 'Tue Feb 4 18:35:36 2003' >>> import os >>> os.getuid() 500 >>> import pwd >>> pwd.getpwuid(500) ('hans', 'x', 500, 100, 'Hans Meier', '/home/hans', '/bin/bash')</pre><p>Ok, now I hope you got a small idea of Python. Have fun with it. I had... :-)</p><p>If you have further questions, I would <span class="emphasis"><em>really</em></span> advise you to continue with a good book or the documentation on <a href="http://www.python.org" target="_top">http://www.python.org</a>. Please don't ask general Python questions on the CapiSuite lists...</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="re05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">capisuitefax </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> A first look on the incoming and idle scripts</td></tr></table></div></body></html>