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]
$Post =.

second attempt

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

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?



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.

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

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


Thanks for Todd and Mike help in this.

update 12/1/2012


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},
  file = OpenWrite["s.txt", FormatType -> OutputForm, PageWidth -> Infinity];
  Block[{$Urgent = file},
   Information[fun, LongForm -> False] ];

To use it

s = help["DSolve"];

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


2 Answers 2


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]


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

  • $\begingroup$ Nice one! Where is this documented? $\endgroup$ Nov 27, 2012 at 16:29
  • 2
    $\begingroup$ 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. $\endgroup$ Nov 27, 2012 at 16:43
  • $\begingroup$ Even better than finding it in the docs. I've never used DownValues[] before...useful too, thank you. $\endgroup$ Nov 27, 2012 at 16:58
  • 1
    $\begingroup$ @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 $\endgroup$
    – faysou
    Nov 27, 2012 at 17:27

The following works for me

output = OpenWrite["C:\\Users\\Mike Croucher\\outtest3.txt", FormatType -> OutputForm];
$Output = 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];

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. 


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

  • $\begingroup$ You are welcome. Life would be made much easier if Wolfram made Information produce normal output instead of a side effect. $\endgroup$ Nov 27, 2012 at 13:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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