Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I am having little hard time sending output of Information[] command to a text file.

related question How to write output to an external text file in addition to the standard output stream?

I'd like to find what is the correct way to do this. I tried the following 3 things, including what is in the above link, but nothing worked for me. I am using version 8.0.4 on windows 7.

s = OpenWrite["test.txt", FormatType -> OutputForm] (*without FormatType also error*)
$Post = Write[#, s] &
Information["DSolve", LongForm -> False]
Close[s]
$Post =.

second attempt

s = OpenWrite["test.txt"]
$Output = s
Information["DSolve", LongForm -> False]
Close[s]

Third attempt (using the same solution given in the above link)

output = OpenWrite["out.txt", FormatType -> OutputForm];
$PrePrint = (Write[output, #]; #) &;
Information["DSolve", LongForm -> False]

I see the file out.txt gets created, but it is empty. Nothing is written to it. Even after I close Mathematica or the kernel, it is empty. I also get an error when I close it

Close[output]  (*Write::noopen: "Cannot open OutputStream["out.txt",19]"*)

Basically, I want to issue many commands in my notebook, in the form of Information[...] for many topics, and I want this otuput to go to a text file to process later.

What would be the right way to do this?

thanks,

edit

fyi, this is the final version. A small example, to show how it is now working: (this is part of a larger code I use to generate all the symbols in all packages in Mathematica). I was cleaning it to get ready to run it when V 9 is out.

Get["Utilities`CleanSlate`"]
SetOptions[CleanSlate, Verbose -> False];
addOnPackages = {"ANOVA", "Audio"};
output = OpenWrite["info.txt", FormatType -> OutputForm, PageWidth -> Infinity];
$Output = output;
$Urgent = output;

Do[{
   packageName = addOnPackages[[i]];
   Print["<", packageName];
   Get[packageName <> "`"];
   funs = Names[packageName <> "`*"];
   Information[#, LongForm -> False] & /@ funs;
   CleanSlate[Evaluate[packageName <> "`"]]
   }, {i, 1, Length[addOnPackages]}
  ];

Close[output];

Thanks for Todd and Mike help in this.

update 12/1/2012

FYI,

Based on what I learned from the replies here, I made this little function that allows one to capture the output from ? on command into a string. (if you want ?? output, then just change the LongForm->False to LongForm->True (will update this function later to add this as an option to the call. But for now, just to give an idea)

help[fun_String] := Module[{s, file},
  SetDirectory[NotebookDirectory[]];
  file = OpenWrite["s.txt", FormatType -> OutputForm, PageWidth -> Infinity];
  Block[{$Urgent = file},
   Information[fun, LongForm -> False] ];
  Close[file];
  Import["s.txt"]
  ]

To use it

s = help["DSolve"];

and now s is a string of what would have gone to screen.

share|improve this question
add comment

2 Answers

up vote 13 down vote accepted

The output from Information[] gets sent to the $Urgent stream. Here is how you can capture it:

infoFile = OpenWrite["info.txt", FormatType -> OutputForm, PageWidth -> Infinity]

Block[{$Urgent = infoFile},
    Information["DSolve", LongForm -> False]
]

Close[infoFile]

Note that I used PageWidth->Infinity. This results in possibly (?) cleaner formatting in the file. It depends on how you want to process it.

share|improve this answer
    
Nice one! Where is this documented? –  WalkingRandomly Nov 27 '12 at 16:29
2  
I don't think it is documented. Maybe somewhere. I tried DownValues[Information] and saw some tinkering with $Urgent in the definition, which tipped me off. –  Todd Gayley Nov 27 '12 at 16:43
    
Even better than finding it in the docs. I've never used DownValues[] before...useful too, thank you. –  WalkingRandomly Nov 27 '12 at 16:58
1  
@WalkingRandomly you could have a look at this post for more info on DownValues mathematica.stackexchange.com/q/96/66 or this one verbeia.com/mathematica/tips/HTMLLinks/Tricks_Misc_4.html –  Faysal Aberkane Nov 27 '12 at 17:27
add comment

The following works for me

output = OpenWrite["C:\\Users\\Mike Croucher\\outtest3.txt", FormatType -> OutputForm];
$Output = output
Print["hello"]
Close[output];

I get the word 'hello' in outtest3.txt. However, the following does not work

output = OpenWrite["C:\\Users\\Mike Croucher\\outtest4.txt", FormatType -> OutputForm];
$Output = output
Information["DSolve", LongForm -> False];
Close[output];

I get an empty file. According to the documentation, the output from Information[] is a side effect but it seems to work in a different way to the side effect produced by Print[]. After much mucking around with all kinds of settings I decided to cheat.

Create a simple text file called info.m using Notepad that contains

Information["DSolve", LongForm -> False];

Open up a Windows command prompt and pass this directly to the kernel, redirecting output to a text file:

"C:\Program Files\Wolfram Research\Mathematica\8.0\math.exe" < info.m > output.txt

The text file contains

Mathematica 8.0 for Microsoft Windows (64-bit)
Copyright 1988-2011 Wolfram Research, Inc.

In[1]:= DSolve[eqn, y, x] solves a differential equation for the function y
    , with independent variable x
     . DSolve[{eqn , eqn , …}, {y , y , …}, x]
                  1     2        1   2
       solves a list of differential equations. DSolve[eqn, y, {x , x , …}]
                                                                 1   2
        solves a partial differential equation. 

In[2]:= 

It's very messy but at least it gets you some text you can post-process. Is the above any use do you think?

share|improve this answer
    
You are welcome. Life would be made much easier if Wolfram made Information produce normal output instead of a side effect. –  WalkingRandomly Nov 27 '12 at 13:14
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.