Here's the method I tried first:
out = os.popen("/external/cmd -arg").read();
So I then decided to try this method:
out = subprocess.Popen(["/external/cmd -arg"], shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()
OSError: [Errno 10] No child processes
Now, both these first two methods ran just fine from a test script (using Ubuntu's native Python) - but both failed within Xbmc.
So I resorted to this:
os.system("/external/cmd -arg > /tmp/temp.out");
out = open("/tmp/temp.out").read();
This works within Xbmc. Hurrah!
- but it's a hack!
Why won't my first two techniques work? Is there any way to run a command-line tool and directly capture the stdout, without resorting to temp files?
My XBMC platform is PC running Ubuntu Jaunty, and my currently installed xbmc is 9.04.3+svn23754-jaunty1.