Re: How to redirect stdout
Lindsey Spratt <[email protected]>
| Newsgroups | gmane.comp.gnu.prolog.general |
|---|---|
| Message-ID | <[email protected]> |
I did some more investigating...
The particular predicate with which you are testing the redirection of
output, listing/0, sends its output to the "top level output", not
stdout. So, redirecting stdout doesn't affect the output of listing/0.
Here is an approach that does redirect the output of listing/0, using
the internal '$set_top_level_streams'/2 predicate:
======
[Lindsey-Spratts-Computer:~/Documents] lindsey% gprolog
GNU Prolog 1.2.16
By Daniel Diaz
Copyright (C) 1999-2002 Daniel Diaz
| ?- [user].
compiling user for byte code...
toto:-true.
user compiled, 2 lines read - 205 bytes written, 8773 ms
yes
| ?- open(fichier,write,F), current_input(I), current_output(O),
'$set_top_level_streams'(I, F), listing, '$set_top_level_streams'(I,
O), close(F).
F = '$stream'(2)
I = '$stream'(0)
O = '$stream'(1)
yes
| ?- halt.
[Lindsey-Spratts-Computer:~/Documents] lindsey% cat fichier
toto.
[Lindsey-Spratts-Computer:~/Documents] lindsey%
=====
The redirection using set_output/1 should work when redirecting the
output from the 'write/1' predicate.
Cheers,
Lindsey Spratt
On Mar 1, 2005, at 11:30 AM, Alexandre Saidi wrote:
> Thanks Lindsey,
> I've been trying any thing I could to make it work.
> Ther's no way !
> As I said, I saw a mail in the FAQ saying that stdout is not affected
> by set_output.
> I'm using the version 1.2.16.
> Perhaps ther'is is a trick withe the interactive mode ?
>
> Thanks any way.
> ---------------------------------------------
> Here's what I do under prolog (for a test) :
> alex@safran:~> gprolog
> GNU Prolog 1.2.16
> By Daniel Diaz
> Copyright (C) 1999-2002 Daniel Diaz
> | ?- [user].
> compiling user for byte code...
> toto :- true.
>
> user compiled, 2 lines read - 207 bytes written, 4104 ms
>
> yes
> | ?- open(fichier,write,F), current_output(Old), set_output(F),
> listing, flush_output(F), flush_output, close(F).
>
> toto.
>
> F = '$stream'(2)
> Old = '$stream'(1)
>
> (1 ms) yes
> | ?- halt.
> alex@safran:~>
>
> The file 'fichier' is empty.
> I've done many other tests with no success.
> ---------------------------------------------------------
>
> Lindsey Spratt a écrit :
>> Perhaps flush_output(F) before the close(F), or simply
>> 'flush_output', would help.
>> Lindsey
>> On Mar 1, 2005, at 3:04 AM, Alexandre Saidi wrote:
>>> Thanks for your help.
>>>
>>> I'd already tried :
>>>
>>> | ?-open('/home/alex/fichier',write,F), current_output(Old),
>>> set_output(F), a_call, close(F), set_output(Old).
>>>
>>> But the file 'fichier' is of size 0 !
>>>
>>> So what's wrong with my code?
>>> should I flush something ?
>>>
>>> regards.
>>>
>>> AS
>
> --
> Aleksander S. Saidi
> Ecole Centrale de Lyon
> Département Mathématiques-Informatique
> Mél : [email protected]
> Tél : 04.72.18.65.30, Fax : 04.78.33.16.15
>