[Asterisk-Users] agi problem

M.N.A.Smadi smadim2 at grads.ece.mcmaster.ca
Tue May 3 13:58:08 MST 2005


hi;

am using an agi script to do some call forwarding.  I got the following 
pyton script off http://home.cogeco.ca/~camstuff/agi.html:
#!/usr/bin/python

import sys,string

class AGI:
    """
    Class AGI facilitates writing AGI scripts in Python.
       
    Exported functions:
   
        Write(message):
            Writes message to Asterisk Console.
           
        Cmd(command):
            Send command to Asterisk, read result.
            The result is a two element tuple:
                [0] A text string giving the entire result returned by 
Asterisk
                [1] The "result=" integer extracted from the result line
           
            If we get an unhappy response from Asterisk or if the result
            returned to the right of the equals sign is not an integer we
            issue an error message and terminate the script.
   
    Exported Variables:
       
        env
            Dictionary containing the various environment startup items, as
            passed to us by Asterisk.
    """

    def Write(self,data):
    """
    Write unbuffered line output to STDERR.
    Ensures data is flushed out.
    """
    sys.stderr.write(str(data) + "\n")
    sys.stderr.flush()

    def Cmd(self,command):
        """
        Send an AGI command to Asterisk; read back the response.
        The result is a two element tuple:
            [0] A text string giving the entire result returned by Asterisk
            [1] The "result=" integer extracted from the result line
           
        If we get an unhappy response from Asterisk or if the result
        returned to the right of the equals sign is not an integer we
        issue an error message and terminate the script.
        """
        try:
        sys.stdout.write(str(command) + "\n")
        sys.stdout.flush()
            Response = sys.stdin.readline()
            if Response[:11] <> '200 result=':
                #we didn't get a happy response for AGI
                raise "AgiError"
            #accumulate integer portion               
            J = 11
            while J < len(Response) and (Response[J] in '0123456789'):
                J += 1
            res = Response[11:J]
            try:
                ResInt = int(res)
            except ValueError:
                #there is no integer immediatly to the right of the 
equal sign
                raise "AgiError"
        except "AgiError":
            self.Error('Unexpected response to AGI command.')
            self.Error('Command: %s'%command)
            self.Error('Response: %s'%Response)
            self.Error('Script terminated.')
            sys.exit()
        return (Response,ResInt)
       
    def __init__(self):
        """
    Read until blank line to get the AGI environment.
        The lines read are used to build the dictionary 'env'.
    """
        self.env = {1:'moe',2:'joe'}
    while 1:
        line = string.strip(sys.stdin.readline())
            if line == '':
                #blank line signals end
                break
            key,data = string.split(line,':')
            key = string.strip(key)
            data = string.strip(data)
            if key <> '':
                self.env[key] = data



=================

however i think there is something wrong with initialization code, namely:

    def __init__(self):
        """
    Read until blank line to get the AGI environment.
        The lines read are used to build the dictionary 'env'.
    """
        self.env = {1:'moe',2:'joe'}
    while 1:
        line = string.strip(sys.stdin.readline())
            if line == '':
                #blank line signals end
                break
            key,data = string.split(line,':')
            key = string.strip(key)
            data = string.strip(data)
            if key <> '':
                self.env[key] = data


because when i replace that piece of code with my own hardcode variables 
things work just fine.

Now my question is does anybody have a clue why this code is not 
working? or alternatively how can i read the environment variables in 
python?

thanks
m.smadi



More information about the asterisk-users mailing list