From: Michael B. <mbe...@gm...> - 2014-04-21 06:16:10
|
thanks Daniel, that did the trick I guess /usr/local/bin/ is not in the path used by agi's.... seems so odd though that it would work if I ran it outside of an agi as the asterisk user, I would think the paths would be the same since both run as the asterisk user... anyway, it works now, which is what's most important to me :) thanks again! On Sun, Apr 20, 2014 at 3:57 PM, Daniel Selans <da...@se...> wrote: > Try passing the full path for ‘squeezy’. > > On Apr 20, 2014, at 3:07 AM, Michael Belleville <mbe...@gm...> > wrote: > > ok, I redirected stderr to a file, here it is: > begin > log____________________________________________________________________ > Traceback (most recent call last): > File "/var/lib/asterisk/agi-bin/voicecmd_py.agi", line 76, in <module> > check_call([cmd,arg1,arg2], shell=False) > File "/usr/lib64/python2.6/subprocess.py", line 500, in check_call > retcode = call(*popenargs, **kwargs) > File "/usr/lib64/python2.6/subprocess.py", line 478, in call > p = Popen(*popenargs, **kwargs) > File "/usr/lib64/python2.6/subprocess.py", line 642, in __init__ > errread, errwrite) > File "/usr/lib64/python2.6/subprocess.py", line 1234, in _execute_child > raise child_exception > OSError: [Errno 2] No such file or directory > ___________________________________________________________________________ > end log > > > and here is the agi itself: > begin > script__________________________________________________________________ > #!/usr/bin/env python > > > from subprocess import * > from asterisk.agi import * > import os > import sys > > sys.stdout = open('/tmp/pyoutfile', 'w') > sys.stderr = open('/tmp/pyerrfile', 'w') > > > #print "hello" > > > #def main(): > agi = AGI() > agi.verbose("python agi started", 1) > callerId = agi.env['agi_callerid'] > agi.verbose("call from %s" % callerId) > > cmd = agi.env['agi_arg_1'] > agi.verbose("command text: %s" % cmd) > cmd = cmd.lower() > > words = cmd.split() > for word in words: > > agi.verbose("word: %s" % word) > > if any("theater" in s for s in words): > room = "theater" > elif any("kitchen" in s for s in words): > room = "kitchen" > elif any("master" in s for s in words): > room = "masterbedroom" > elif any("season" in s for s in words): > room = "3season" > elif any("outside" in s for s in words): > room = "deck" > else: > room = "none" > > if any("light" in s for s in words): > item = "light" > elif any("music" in s for s in words): > item = "music" > else: > item = "none" > > > if any("off" in s for s in words): > value = "off" > elif any("medium" in s for s in words): > value = "medium" > elif any("on" in s for s in words): > value = "on" > else: > value = "none" > > > agi.verbose("room: %s" % room) > agi.verbose("item: %s" % item) > agi.verbose("value: %s" % value) > > if (item == "music") and (value == "on" or value == "off") and (not room > == "none"): > fullcmd = "squeezy" + " -" + room + " -" + value > cmd = "squeezy" > arg1 = "-" + room > arg2 = "-" + value > agi.verbose(cmd) > agi.verbose(arg1) > agi.verbose(arg2) > agi.verbose(fullcmd) > #out = os.system(fullcmd) > check_call([cmd,arg1,arg2], shell=False) > > > agi.verbose("python agi ended") > ________________________________________________________________________ > end script > > > > if I run this in an outside python script it works just fine, no errors, > I've run it as asterisk and root > begin > script_________________________________________________________________ > #!/usr/bin/env python > > from subprocess import * > import os > > cmd = "turn outside music on" > > words = cmd.split() > for word in words: > > print "word: %s" % word > > if any("theater" in s for s in words): > room = "theater" > elif any("kitchen" in s for s in words): > room = "kitchen" > elif any("outside" in s for s in words): > room = "deck" > else: > room = "none" > > if any("light" in s for s in words): > item = "light" > elif any("music" in s for s in words): > item = "music" > else: > item = "none" > > > if any("off" in s for s in words): > value = "off" > elif any("medium" in s for s in words): > value = "medium" > elif any("on" in s for s in words): > value = "on" > else: > value = "none" > > > print "room: %s" % room > print "item: %s" % item > print "value: %s" % value > > if (item == "music") and (value == "on" or value == "off") and (not room > == "none"): > fullcmd = "squeezy" + " -" + room + " -" + value > cmd = "squeezy" > arg1 = "-" + room > arg2 = "-" + value > #os.system(fullcmd) > check_call([cmd,arg1,arg2],shell=False) > ___________________________________________________________________________ > end script > > > On Sun, Apr 20, 2014 at 2:39 AM, Michael Belleville <mbe...@gm... > > wrote: > >> I've tried using both os.system as well as subprocess.call to invoke an >> external command that is not working for me. It has something to do with >> the command I am trying to run, which is squeezy, a command line interface >> for logitech media center. >> >> I've been able to use os.system as well as subprocess.call successfully >> in an agi using other commands, but not squeezy. >> >> I can get squeezy to work using both os.system as well as subprocess.call >> in an external python script if I copy out the revelant chunk of code, but >> it will not work in an agi. It works in an external python script if I run >> it as either root or asterisk, so I don't think it is a permissions issue... >> >> If I try to run squeezy in the agi using subprocess.call or >> subprocess.check_call, the python agi dies right there >> >> if I use os.system, the command still doesn't run as expected, but the >> agi continues normally. >> >> I don't know how to capture any useful output since the agi dies if I try >> to use subprocess.check_call. >> >> I don't see any of the regular python error messages in my asterisk CLI >> output, the only output I see I generate myself with agi.verbose >> >> How can I get to what is happening in the agi? Can the python >> errors/output be redirected somewhere I can see them? I have been >> debugging my issues using external python scripts to test, but in this case >> my issue goes away in the external script... >> >> I would appreciate any advice :) >> >> thank you very much to all for the wonderful piece of software, it is so >> nice to be able to use python for agi scripts! >> > > > ------------------------------------------------------------------------------ > Learn Graph Databases - Download FREE O'Reilly Book > "Graph Databases" is the definitive new guide to graph databases and their > applications. Written by three acclaimed leaders in the field, > this first edition is now available. Download your free book today! > http://p.sf.net/sfu/NeoTech_______________________________________________ > Pyst-users mailing list > Pys...@li... > https://lists.sourceforge.net/lists/listinfo/pyst-users > > > > > ------------------------------------------------------------------------------ > Learn Graph Databases - Download FREE O'Reilly Book > "Graph Databases" is the definitive new guide to graph databases and their > applications. Written by three acclaimed leaders in the field, > this first edition is now available. Download your free book today! > http://p.sf.net/sfu/NeoTech > _______________________________________________ > Pyst-users mailing list > Pys...@li... > https://lists.sourceforge.net/lists/listinfo/pyst-users > > |