Virtual file for subprocess

Grant Edwards invalid at invalid.invalid
Fri Dec 11 14:21:29 EST 2009


On 2009-12-11, Lie Ryan <lie.1296 at 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!!



More information about the Python-list mailing list