From: bobnotbob on 11 Dec 2009 12:07 I am calling external executable from my python program (using subprocess). This external program's output is a text file which I then read and parse. Is there any way to "sandbox" the calling of this external program so that it writes to a virtual file instead of the hardcoded text?
From: Lie Ryan on 11 Dec 2009 13:56 On 12/12/2009 4:07 AM, bobnotbob wrote: > I am calling external executable from my python program (using > subprocess). This external program's output is a text file which I > then read and parse. Is there any way to "sandbox" the calling of > this external program so that it writes to a virtual file instead of > the hardcoded text? If the program writes its outputs to the stdout, you can redirect the program's stdout using subprocess, try to find a switch that will tell it to write to stdout. Otherwise, you're pretty much stuck to using a real file AFAIK.
From: Grant Edwards on 11 Dec 2009 14:21 On 2009-12-11, Lie Ryan <lie.1296(a)gmail.com> wrote: > On 12/12/2009 4:07 AM, bobnotbob wrote: >> I am calling external executable from my python program (using >> subprocess). This external program's output is a text file which I >> then read and parse. Is there any way to "sandbox" the calling of >> this external program so that it writes to a virtual file instead of >> the hardcoded text? > > If the program writes its outputs to the stdout, you can > redirect the program's stdout using subprocess, try to find a > switch that will tell it to write to stdout. Otherwise, you're > pretty much stuck to using a real file AFAIK. Most Unix systems have paths that you can pass to programs which think they need to write to "files". Accessing those files actually access already open file descriptors such as stdin, stdout, and stderr. On Linux, for example, you can tell the program to write to /proc/self/fd/1 and that's actually stdout which can then be a pipe connected to the Python program that invoked the program. This can be very useful when executing a program which can be told what file to write to, but who's author was too narrow-minded to provide the option to send output to stdout. If you need to get fancy you can create multiple input/output pipes that are inherited by the child program and then references as /proc/self/fd/<whatever>. -- Grant Edwards grante Yow! These PRESERVES should at be FORCE-FED to PENTAGON visi.com OFFICIALS!!
|
Pages: 1 Prev: Active Directory ADO strange objects returned Next: eiger replacement? |